Php 如果值不为空,则在foreach循环中对数组进行排序
我有这个foreach循环,我想知道是否有一种方法可以根据一个值对数组进行排序,如果它不是空的,位于顶部,其余的则下降。以下是我迄今为止所做的工作:Php 如果值不为空,则在foreach循环中对数组进行排序,php,Php,我有这个foreach循环,我想知道是否有一种方法可以根据一个值对数组进行排序,如果它不是空的,位于顶部,其余的则下降。以下是我迄今为止所做的工作: foreach ((array)$accounts as $v=>$k){ if(!empty($k)) { echo $v; echo "</br>"; echo $k; echo "&
foreach ((array)$accounts as $v=>$k){
if(!empty($k)) {
echo $v;
echo "</br>";
echo $k;
echo "</br>";
} else {
echo $v;
echo "</br>";
}
}
如您所见,k2
没有值。我希望它位于底部,因为它没有值
直接用打印($accounts,TRUE)
输出数组:
正如你所见,谷歌和Facebook没有价值观。因此,我希望它们位于底部。您可以这样做,使用对数组进行排序,然后相应地使用它们
$accounts = (array) $accounts;
usort($accounts, function($a, $b) {
return strlen($b) - strlen($a);
});
现在
您可以使用对数组进行排序,然后相应地使用它们
$accounts = (array) $accounts;
usort($accounts, function($a, $b) {
return strlen($b) - strlen($a);
});
现在
您可以将自定义函数与一起使用,它将空值放在最后,但按字母顺序对其余值进行排序:
$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' => '',
)
您可以将自定义函数与一起使用,它将空值放在最后,但按字母顺序对其余值进行排序:
$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>';
感谢您最终提供了阵列结构
根据您的要求:
如果数组不是空的,则根据一个值对数组进行排序,使其位于顶部,其余的则向下
使用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>';
这样更好,您可以添加数组,您正在尝试排序的内容@阿拉姆里$v=>$k
…你想发动第三次世界大战吗$v
是$value
的缩写,$k
是$key
的缩写。在将其放入for each循环之前,请使用asort($accounts)
也无需将$accounts强制转换为(数组)它已经是一个数组@MonkeyZeus帮我不要带它:)调用键$v
,值$k
=war。更好的是,你可以添加数组,你要排序的东西@阿拉姆里$v=>$k
…你想发动第三次世界大战吗$v
是$value
的缩写,$k
是$key
的缩写。在将其放入for each循环之前,请使用asort($accounts)
也无需将$accounts强制转换为(数组)它已经是一个数组@MonkeyZeus帮我不要带它:)调用键$v
,值$k
=war。先生,我已经更新了我的问题。你能再检查一下吗?现在理解起来可能更容易,但如果没有值,它就不会输出键。还有,所有的钥匙都换成了数字。顺便说一句,你忘了那里的一个符号,这让我一开始就迷路了。。如果您可以更正它,那么这个答案可能对其他人和像我这样的新手有用。就在br
之后,只需添加一个
先生,我已经更新了我的问题。你能再检查一下吗?现在理解起来可能更容易,但如果没有值,它就不会输出键。还有,所有的钥匙都换成了数字。顺便说一句,你忘了那里的一个符号,这让我一开始就迷路了。。如果您可以更正它,那么这个答案可能对其他人和像我这样的新手有用。它就在br
之后,只需添加一个
先生,您可以看到应该有一个键和一个值?它用数字替换键。。。有办法保留钥匙吗?当然,只需使用uasort
而不是usort
。答案已更新。先生,正如您所看到的,应该有一个键和一个值?它用数字替换键。。。有办法保留钥匙吗?当然,只需使用uasort
而不是usort
。回答更新。做得好。因为更简单、更干净而被接受:)谢谢你,一切都好了。因为更简单更干净而被接受:)非常感谢