PHP数组\u multisort未正确排序第二个数组

PHP数组\u multisort未正确排序第二个数组,php,arrays,sorting,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 ) Arr

这是我的密码:

$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
)
为什么第二个数组的排序不正确?如果它是正确的,有人能解释一下它是如何正确的吗


谢谢。

这是
array\u multisort
的预期行为。对第一个数组进行排序,对第二个数组进行重新排序,使其值继续对应于第一个数组的相同值。请注意,如果第一个数组的值相等(两个
100
s),则第二个数组的值在内部排序(因此
Amanda
位于
Jane
之前)


如果要对两个数组进行独立排序,可以使用两个调用。

是的,这是正确的。您错误地使用了PHP的“array\u multisort”函数。它不会对两个阵列进行排序,但会对第一个阵列进行排序,第二个阵列将按照与第一个阵列对应的顺序进行定位

(
  [0] => Debra --in first array 3rd element has moved to 0th position
  [1] => Alex -- in first array 0th element has moved to 1st position
  [2] => Amanda -- in first array 2nd element has moved to 2nd position
  [3] => Jane -- in first array 1st element has moved to 3rd position
)
排序前的$number:

(
  [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)
)
因此,第二个数组将不会得到排序,而是根据第一个数组来定位其元素

(
  [0] => Debra --in first array 3rd element has moved to 0th position
  [1] => Alex -- in first array 0th element has moved to 1st position
  [2] => Amanda -- in first array 2nd element has moved to 2nd position
  [3] => Jane -- in first array 1st element has moved to 3rd position
)
很简单:

数组\多排序($名称、排序\ ASC、排序\字符串、,
$numbers,SORT\u NUMERIC,SORT\u ASC);

打印(姓名)

PHP的array\u multisort可以对第一个数组进行排序,并根据第一个数组的项目对第二个数组进行排序,而不是同时对这两个数组进行排序。

$numbers=array(10,100,100,0)
$names=数组(“Alex”、“Jane”、“Amanda”、“Debra”)
数组\多排序($names,SORT\ ASC,SORT\ STRING)
数组_multisort($number)


打印(姓名)

打印(数字)

谢谢你详细的回答,拉贾特。我会尽快接受它。为了解释,我现在想知道为什么当时甚至可以为两个数组添加排序参数?因此,如果我添加到第二个数组排序字符串,它不会影响结果。不起作用,相同的结果,只打印数字,你会发现其中一个是错误的。对我来说:数组([0]=>Alex[1]=>Amanda[2]=>Debra[3]=>Jane)是的,但检查数字数组,打印($numbers)它将是错误的
数组\u多端口($number);然后您使用multisort两次,这是一个完全不同的事情,并且会起作用。不管怎样,问题已经回答了,所以这是离题的。欢迎来到堆栈溢出。虽然这可能是一个答案,但我建议为OP提供一个工作示例。如果没有,可能会有人标记这个答案。