我不知道为什么我会遇到这个问题,但我正在尝试对数组进行排序,例如“0,1,0,0,1,1,0,0”,以便数字 1 出现在结束,但数组索引按其原始顺序保留。
使用以下代码示例
<pre><?php
$array = array(0,1,0,0,1,1,0,0);
print_r($array);
asort($array);
print_r($array);
?></pre>
从原始数组开始:
Array
(
[0] => 0
[1] => 1
[2] => 0
[3] => 0
[4] => 1
[5] => 1
[6] => 0
[7] => 0
)
执行 asort($array) 后:
Array
(
[6] => 0
[7] => 0
[0] => 0
[3] => 0
[2] => 0
[1] => 1
[5] => 1
[4] => 1
)
但是我需要做什么才能获得以下输出?(注意索引顺序)
Array
(
[0] => 0
[2] => 0
[3] => 0
[6] => 0
[7] => 0
[1] => 1
[4] => 1
[5] => 1
)
我真的很想避免必须进行进一步的处理循环来按不同的值组重新排序索引(即对值为“0”的项目上的所有索引进行排序,然后对值为“1”的项目进行排序并合并结果)
编辑:这真的很乱,但解决了我想要实现的一个例子
print_r(stupid_array_order_hack($array));
function stupid_array_order_hack($array) {
if(isset($array) === TRUE AND is_array($array) === TRUE) {
$reordering_group = array();
$reordering_merge = array();
// Group the index's by value
foreach($array as $key => $value) {
$reordering_group[$value][] = $key;
}
// sort the grouped index's
foreach($reordering_group as $key => $value) {
asort($reordering_group[$key]);
$reordering_merge = array_merge($reordering_merge,$reordering_group[$key]);
}
return array_replace(array_flip($reordering_merge),$array);
}
return $array;
}
解决方案:使用 array_multisort() 的方法
$array = array(0,1,0,0,1,1,0,0);
$temp = array($array,array_keys($array));
array_multisort($temp[0],SORT_ASC,$temp[1],SORT_ASC);
$array = array_combine($temp[1], $temp[0]);