[英]Sorting an array in a foreach loop if value is not empty
我有这个foreach循环,我想知道是否有一种方法可以将数组累加到一个值上,如果它不是不为空,而剩下的就落空了。 这是我到目前为止所做的:
foreach ((array)$accounts as $v=>$k){
if(!empty($k)) {
echo $v;
echo "</br>";
echo $k;
echo "</br>";
} else {
echo $v;
echo "</br>";
}
}
注意: $k
返回一个字符串,或者它只是空而不是NULL
输出类似于:
k1
v1
k2
k3
v3
如您所见, k2
没有价值。 我希望它位于最底部,因为它没有价值。
直接使用print_r($accounts, TRUE)
输出数组:
Array
(
[TwitterSecKey] => Twitter Sec Key
[GoogleSecKey] =>
[InstagramSecKey] => Instagram Sec Key
[FacebookSecKey] =>
)
如您所见,Google和Facebook没有价值。 所以我希望他们在最底层。
您可以使用usort对数组进行排序,然后相应地使用它们
$accounts = (array) $accounts;
usort($accounts, function($a, $b) {
return strlen($b) - strlen($a);
});
现在。
foreach($accounts as $k=>$v){
echo 'key: '. $k .'<br>';
echo 'value: '. $v .'<br>';
}
更新要保留密钥,您可以将uasort用作
$accounts = (array) $accounts;
uasort($accounts, function($a, $b) {
return strlen($b) - strlen($a);
});
您可以将自定义函数与uasort
一起uasort
,该函数将空值放在最后,但其余所有按字母顺序排序:
$accounts = array (
'x' => 'c',
'y' => 'a',
'z' => 'b',
'n' => '',
);
uasort($accounts, function($a, $b) {
return empty($a) ? 1 : (empty($b) ? -1 : strcmp($a,$b));
});
var_export($accounts);
输出:
array (
'y' => 'a',
'z' => 'b',
'x' => 'c',
'n' => '',
)
感谢您最终提供您的数组结构。
根据您的要求:
如果数组不为空,则将数组的值排序为一个值,然后将其舍弃
不需要使用uasort()
进行复杂的排序算法,请尝试以下操作:
<?php
$accounts= array(
'TwitterSecKey'=>'Twitter Sec Key',
'GoogleSecKey'=>null,
'InstagramSecKey'=>'Instagram Sec Key',
'FacebookSecKey'=>null
);
echo '<pre>'.print_r($accounts, TRUE).'</pre>';
arsort($accounts); // secret sauce
echo '<pre>'.print_r($accounts, TRUE).'</pre>';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.