【发布时间】:2021-09-28 10:09:40
【问题描述】:
我有以下数组:
$values = [
'a' => 0,
'b' => 1,
'c' => 0,
'd' => 3,
'e' => 2
];
我需要能够像这样对其进行排序:
$values = [
'b' => 1,
'e' => 2,
'd' => 3,
'a' => 0,
'c' => 0
];
我想出的最快的解决方案是:
$zero = array_filter($values, fn($val) => $val === 0);
$non_zero = array_diff_assoc($values, $zero);
asort($non_zero);
$result = array_merge($non_zero, $zero);
排序规则:
- 需要保留密钥
- 对于相同的值,键顺序无关紧要
我的问题是:有没有更好的方法来做到这一点?
谢谢!
更新
看起来这个也可以:
asort($values);
uasort($values, function($a, $b){
return $a === 0 ? 1 : -1;
});
有更好的想法吗?
【问题讨论】:
-
你必须保留你的索引吗?
-
@CarlosCarucce 是的
标签: php algorithm sorting php-7.4