PHP array_multisort没有正确排序第二个数组

时间:2017-07-24 04:26:27

标签: php arrays sorting

这是我的代码:

$numbers = array(10, 100, 100, 0);
$names = array("Alex", "Jane", "Amanda", "Debra");
array_multisort($numbers, $names);

print_r($numbers);
print_r($names);

以上代码输出:

Array
(
  [0] => 0
  [1] => 10
  [2] => 100
  [3] => 100
)

Array
(
  [0] => Debra
  [1] => Alex
  [2] => Amanda
  [3] => Jane
)

为什么第二个数组的排序不正确?如果它是正确的,任何人都可以解释它是如何正确的?

感谢。

5 个答案:

答案 0 :(得分:0)

这是array_multisort的预期行为。对第一个数组进行排序,并对第二个数组进行重新组织,使其值继续对应于第一个数组的相同值。请注意,在第一个数组具有相等值(两个100 s)的情况下,第二个数组的值在内部排序(因此Amanda位于Jane之前)。

如果您想独立排序两个数组,则可以使用两个sort次调用。

答案 1 :(得分:0)

是的,这是正确的。你正在以错误的方式使用PHP的'array_multisort'函数。它不会对两个数组进行排序,但会对第一个数组进行排序,第二个数组将按照与第一个数组相对应的顺序进行排序。

$ numbers排序前:

return $new_inventory+$defaults;

排序后:

(
  [0] => 10
  [1] => 100
  [2] => 100
  [3] => 0
)

因此,第二个数组不会得到排序,但会根据第一个数组得到它的元素。

(
  [0] => 0 (position before sorting - 3rd)
  [1] => 10 (position before sorting - 0)
  [2] => 100 (position before sorting - 2 or 1)
  [3] => 100 (position before sorting - 2 or 1)
)

答案 2 :(得分:0)

简单易懂:

array_multisort($ names,SORT_ASC,SORT_STRING,
                $ numbers,SORT_NUMERIC,SORT_ASC);
的print_r($名);

答案 3 :(得分:0)

PHP array_multisort 用于对第一个数组进行排序,并根据第一个数组的项排列第二个数组,而不是对它们进行排序。

答案 4 :(得分:0)

$ numbers = array(10,100,100,0);
$ names = array(“Alex”,“Jane”,“Amanda”,“Debra”);
array_multisort($ names,SORT_ASC,SORT_STRING);
在array_multisort($号);


的print_r($名);
的print_r($编号);