我不知道为什么我有这个问题,但我想排序一个数组,如“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
(
[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]);
一种解决方案可能是添加$ I * 0.01的地方,我是分类和排序,然后服用后地板前的指数每个元素。但是这似乎很不妥。 – sank
我的想法与sank相似,只是解决方案稍微清晰一些,即使它略显“粗糙”。 – Robin
干杯家伙,我会牢记这一点,这是一个很好的建议。 – Scuzzy