我想在php中以与值相反的顺序对数组进行排序

时间:2010-12-04 12:47:44

标签: php arrays

我想以相反的值排序数组。我使用了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,就像从原始数组一样。具有相同值的键不会反转。 感谢。

6 个答案:

答案 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); ?>
  1. Array_flip翻转每个键&lt; ==&gt;值。
  2. 按“now-keys”排序数组;
  3. 再次使用Array_flip获取前星座和按值排序的数组。
  4. - P.s。: - 为什么这么复杂? @others。

答案 5 :(得分:0)

似乎下一个数组没有正确的响应:

$myArray = array( 
    "d" => 1, "Mircea Anca" => 2, 
    "b" => 3, "Iuliana Moise" => 2, 
    "c" => 4, "Florina Popescu" => 2 )