我不知道为什么我遇到这个问题,但我正在尝试对数组进行排序,例如“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]);
答案 0 :(得分:1)
您需要按值对数组进行分组并对各个组进行排序:
$array = array(0,1,0,0,1,1,0,0);
$groups = array();
foreach ($array as $key => $value) {
$groups[$value][$key] = $value;
}
ksort($groups);
$array = array();
foreach ($groups as $group) {
$array += $group;
}
print_r($array);
答案 1 :(得分:1)
如果密钥需要匹配,那么我建议你使用array_multisort()。例如:
$array = array(0,1,0,0,1,1,0,0);
$other_array = array(1,2,3,4,5,6,7,8);
array_multisort($array, $other_array);
这将对两个数组进行排序,以使数组能够匹配关键指令。
答案 2 :(得分:0)
您可能希望使用array_merge()
重置数组键。