如果我有一个这样的数组(它可以是任意数字组合):
$arr = array(1, 2, 4, 2, 3, 5, 4, 2, 1);
我希望将所有等于4的元素移动到数组的末尾,同时保留其他元素的顺序,因此我的最终数组应该是:
1, 2, 2, 3, 5, 2, 1, 4, 4
我认为可以通过使用排序函数来实现这一点:
uasort($arr, function($a, $b){
return $b == 4 ? -1 : 1;
});
使用上述代码将“4”元素移到末尾,但破坏了其他元素的顺序,这是我的结果:
2, 3, 1, 2, 5, 2, 1, 4, 4
我的排序处理程序应该长什么样?/有比对数组进行排序更好的方法吗?
请注意:我想保留我的数组键(因此使用uasort
)
$a
。只需加入一个针对 4 的子句,然后使用您用于普通排序的处理程序。将1
替换为($a < $b ? -1 : 1)
(当然不考虑相等情况)。 - undefined1
换成0
,看看是否保持了所有其他比较对的原样?值得一试(尽管为了可维护性/可理解性,我认为我还是会选择Rizier的方法)。 - undefined