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

我想在php中按与值相反的顺序对数组进行排序,php,arrays,Php,Arrays,我想按值的相反顺序对数组进行排序。我使用了arsort php函数,但结果对我不好 例如: 我想对下一个数组进行排序: myArray = array("d" => 1, "f" => 2, "b" => 3, "c" => 4, "e" => 2); $myArray = array( "d" => 1, "Mircea Anca" => 2, "b" => 3, "Iuliana Moise" => 2,

我想按值的相反顺序对数组进行排序。我使用了arsort php函数,但结果对我不好

例如:

我想对下一个数组进行排序:

myArray = array("d" => 1, "f" => 2, "b" => 3, "c" => 4,  "e" => 2); 
$myArray = array( 
    "d" => 1, "Mircea Anca" => 2, 
    "b" => 3, "Iuliana Moise" => 2, 
    "c" => 4, "Florina Popescu" => 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 );
f在e顺序之前,类似于原始数组。具有相同值的键不能反转。 谢谢。

编辑: 这在内置函数中是不可行的,您需要实现自己的排序解决方案。你可以按照这个来理解更多


这些解决方案能够奏效,这是巧合:

$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){
返回$a请尝试此选项

arsort($array, krsort($array));

我认为最好的选择是使用uasort php函数。 在您的案例中使用uasort的优点是,您可以更改定义自己的排序算法,而不必与php asort比较方法绑定

必须定义一个回调函数来计算第一个值是否小于、大于或等于第二个值

您必须查看php官方在线文档以了解此函数的功能,但我认为很容易掌握,因此我将为您的问题留下自己的解决方案

function cmp($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? 1 : -1;
}
函数cmp($a,$b){
如果($a=$b){
返回0;
}
回报($a<$b)?1:-1;
}
使用此回调函数,可以执行反向排序,同时在键具有相同值时保持键的原始顺序

最好的,
Demian

一种简便易行的方法是:

<?php $a = array_flip($a); ksort($a); $a = array_flip($a); ?>

  • 数组翻转翻转每个键值
  • 按“现在键”对数组排序
  • 数组\再次翻转以获得前一个星座和按值排序的数组
  • --附言:--
    为什么这么复杂?@others.

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

    myArray = array("d" => 1, "f" => 2, "b" => 3, "c" => 4,  "e" => 2); 
    
    $myArray = array( 
        "d" => 1, "Mircea Anca" => 2, 
        "b" => 3, "Iuliana Moise" => 2, 
        "c" => 4, "Florina Popescu" => 2 )
    
    这对我有用

    由于asort和arsort函数似乎通过降序键值对具有相同值的行进行排序,因此如果值相等,arsort将“切换”较低的键值和较高的键值

    我的解决方案是从低到高排序(asort),这仍然会执行不需要的行翻转,然后反转数组,将具有相同值的行移回其正确的各自位置

    源:数组([0]=>1[1]=>0.5[2]=>2[3]=>3[4]=>0.5)

    排序:数组([4]=>0.5[1]=>0.5[0]=>1[2]=>2[3]=>3)-注意,相同值行的键值被翻转

    反转:数组([3]=>3[2]=>2[0]=>1[1]=>0.5[4]=>0.5)-现在您对数组进行了反转排序,并为具有相同值的行保持了键完整性

    $array=array(1,.5,2,3,.5);
    asort($array);
    $array=array_reverse($array,TRUE);
    

    非常不寻常的任务,我无法想象这样做的合理原因。但是,您可以始终使用usort()要实现任意类型的排序算法sort@Sharpnel.usort的主要问题是在最终产品中丢失了密钥。在定义自己的排序函数时,必须使用uasort保留密钥。请查看官方documentation@Col.你又来了?:)我希望看到您使用
    uasort
    编写的解决方案。请告诉我们
    arsort()
    的第二个参数必须是二进制标志,而不是布尔值(无论类型转换如何)。执行
    krsort()有何意义
    ?这绝对不会满足OP的要求;这将首先对键进行排序,OP希望避免对值相等的键进行排序。请参阅我的答案。了解为什么这种类型的响应不起作用。