【问题标题】:how php array_multisort work?php array_multisort 如何工作?
【发布时间】:2012-02-01 09:45:07
【问题描述】:

我在理解 array_multisort 方面有些问题

查看当两个值相同时如何排序:

 $a1=array("Dog","Dog","Cat");
 $a2=array("Pluto","Fido","Missy");
 array_multisort($a1,$a2);
 print_r($a1);
 print_r($a2);

上面代码的输出将是:

 Array ( [0] => Cat [1] => Dog [2] => Dog )
 Array ( [0] => Missy [1] => Fido [2] => Pluto )

让我知道为什么 Missy 先来 数组([0] => Fido,[1] => Missy,[2] => Pluto) 对于下降反之亦然

也看到这个

带排序参数:

$a1=array("Dog","Dog","Cat");
$a2=array("Pluto","Fido","Missy"); 
array_multisort($a1,SORT_ASC,$a2,SORT_DESC); 
print_r($a1); 
print_r($a2);

上面代码的输出将是:

 Array ( [0] => Cat [1] => Dog [2] => Dog ) 
 Array ( [0] => Missy [1] => Pluto [2] => Fido )

但是 Array ( [0] => Missy [1] => Pluto [2] => Fido ) 不在 SORT_DESC 是某种类型的混淆。

谁能解释一下 array_multisort 是如何工作的,以便我了解它是如何工作的。

【问题讨论】:

    标签: php arrays sorting


    【解决方案1】:

    嗯,您正在以类似于 Excel 等程序的方式对数组进行排序。每个数组对应一列。

    首先,所有数组都按给定的第一个数组排序。如果有相同的值,受影响的将按给定的第二个数组排序。如果再次有相等的值,则使用第三个数组,等等。

    或者换句话说:数组使用所有数组排序,但从右边开始(如果你假设它真的按所有列排序一次)。

    对于您的特定示例(第二个):

    一开始你想按升序排序,所以Cat 会排在第一位。因此,最后一个数组元素将移动到两个数组中的第一个位置。其他两个元素Dog 是相等的。这会导致函数查看下一个数组。它被告知按降序对该数组进行排序,因此Pluto 排在第一位。在这种情况下,这会导致元素根本不移动(因为它们的顺序已经正确)。

    【讨论】:

    • 哦,仅此而已,第一个实际上是短路的,第二个只是重新排列它的元素,与第一个将他的元素替换为短路的顺序相同。
    • 没错。所有数组都使用相同的顺序进行排序。它不是用来保存对sort() 的多次调用。
    【解决方案2】:

    第二个数组中的条目对应于第一个数组中的相同条目。

    【讨论】:

      【解决方案3】:

      如果您查看documentation 和第一个示例,您会注意到这是预期的行为。

      有两个参数,两个数组:第一个数组是排序的;如果第一列中的对应值相同,则第二个数组的对应值将重新排列和排序。至于你的例子,把它想象成你在做一个 SQL ORDER BY Animal, Name

      1. 猫至上
      2. 两条狗打成平手,所以 Fido 排在第一位,因为 Fido

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-07
        • 1970-01-01
        • 2016-09-20
        • 1970-01-01
        • 2021-07-08
        • 1970-01-01
        相关资源
        最近更新 更多