我想以相反的值排序数组。我使用了arsort php函数,但结果对我不好。
示例:
我想排序下一个数组:
myArray = array("d" => 1, "f" => 2, "b" => 3, "c" => 4, "e" => 2);
使用arsort php函数后,结果是:
myArray =array ( "c" => 4, "b" => 3, "e" => 2, "f" => 2, "d" => 1 );
它不好,因为arsort函数不保持数组中元素的初始顺序。
我想要的结果如下:
myArray =array ( "c" => 4, "b" => 3, "f" => 2, "e" => 2, "d" => 1 );
在e命令之前的f,就像从原始数组一样。具有相同值的键不会反转。 感谢。
答案 0 :(得分:4)
修改强>: 内置函数无法实现这一点,您需要实现自己的排序解决方案。您可以按照此question I opened了解更多内容。
这些解决方案很有效:
$myArray = array("d" => 1, "f" => 2, "b" => 3, "c" => 4, "e" => 2);
uasort($myArray, function($a, $b){
if($a == $b)
return 1;
else
return $b - $a;
});
print_r($myArray);
或
$myArray = array("d" => 1, "f" => 2, "b" => 3, "c" => 4, "e" => 2);
uasort($myArray, function($a, $b){
return $a <= $b;
});
print_r($myArray);
答案 1 :(得分:3)
这对我有用。
由于asort和arsort函数似乎通过降序键值对具有相等值的行进行排序,因此如果值相等,arsort将“切换”较低的键值较高的值。
我的解决方案是从低到高排序(asort),它仍会执行不需要的行翻转,然后反转数组,将具有相同值的行移回其正确的相应位置。
orig:数组([0] =&gt; 1 [1] =&gt; 0.5 [2] =&gt; 2 [3] =&gt; 3 [4] =&gt; 0.5)
排序:数组([4] =&gt; 0.5 [1] =&gt; 0.5 [0] =&gt; 1 [2] =&gt; 2 [3] =&gt; 3) - 注意键值被翻转对于相同的有价值的行
反转:数组([3] =&gt; 3 [2] =&gt; 2 [0] =&gt; 1 [1] =&gt; 0.5 [4] =&gt; 0.5) - 现在你已经反向排序了数组并保持具有相等值的行的密钥完整性。
$array=array(1,.5,2,3,.5);
asort($array);
$array=array_reverse($array,TRUE);
答案 2 :(得分:0)
请试试这个
arsort($array, krsort($array));
答案 3 :(得分:0)
我认为你最好的选择是使用uasort php功能。 在您的情况下使用uasort的优点是您可以更改以定义自己的排序算法,而不是与php asort比较方法相关联。
您必须定义一个回调函数来评估第一个值是否小于,大于或等于第二个值。
你必须查看php官方在线文档,了解这个功能的用途,但我觉得很容易掌握,所以我会为你的问题留下自己的解决方案。
function cmp($a, $b) {
if ($a == $b) {
return 0;
}
return ($a < $b) ? 1 : -1;
}
使用此回调函数,您可以在保持键的原始顺序时进行反向排序。
最佳, 德棉
答案 4 :(得分:0)
一种简单,随处可用的方式是:
<?php $a = array_flip($a); ksort($a); $a = array_flip($a); ?>
- P.s。: - 为什么这么复杂? @others。
答案 5 :(得分:0)
似乎下一个数组没有正确的响应:
$myArray = array(
"d" => 1, "Mircea Anca" => 2,
"b" => 3, "Iuliana Moise" => 2,
"c" => 4, "Florina Popescu" => 2 )