PHP的array_multisort无法正确排序第二个数组。

3
这是我的代码:
$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

这是array_multisort的预期行为。第一个数组被排序,第二个数组被重新组织,以便其值继续对应于第一个数组的相同值。请注意,当第一个数组具有相等的值(两个100)时,第二个数组的值在内部进行排序(因此AmandaJane之前)。

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


0

很简单:

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


无法工作,结果相同,只需打印数字,就会发现其中一个是错误的。 - Doomenik
这是针对我的: 数组([0] => Alex [1] => Amanda [2] => Debra [3] => Jane) - ehsan karimi
是的,但请检查数字数组,使用print_r($numbers)打印它会出错。 - Doomenik
array_multisort($names, SORT_ASC, SORT_STRING);<br> array_multisort($numbers); 多维数组排序($names,SORT_ASC,SORT_STRING);<br> 多维数组排序($numbers); - ehsan karimi
然后您使用multisort两次,这是完全不同的事情,会起作用。无论如何问题已经得到解答,所以这是离题了。 - Doomenik

0

PHP的array_multisort函数用于对第一个数组进行排序,并根据第一个数组的项目排列第二个数组,而不是同时对两个数组进行排序。


欢迎来到 Stack Overflow。虽然这可能是一个答案,但我建议为 OP 提供一个工作示例。如果没有,可能会被其他人标记。 - Syfer

0

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


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


0

是的,没错。你对 PHP 的 'array_multisort' 函数的理解有误。它不会同时排序两个数组,而是只会对第一个数组进行排序,第二个数组的位置将按照第一个数组的顺序排列。

$numbers 在排序之前:

(
  [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
)

谢谢您的解释,我想知道为什么可以为两个数组添加排序参数?如果我将 SORT_STRING 添加到第二个数组中,它不会影响结果。 - Doomenik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接