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

Here is my code:

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

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

The above code outputs:

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

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

Why is the sorting of second array incorrect? If it is correct, could anyone explain how is it correct?

Thanks.

展开翻译

译文

这是我的代码:</ p>

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

print_r($ numbers );
print_r($ names);
</ code> </ pre>

上面的代码输出:</ p>

  Array 
(\ n [0] =&gt; 0
[1] =&gt; 10
[2] =&gt; 100
[3] =&gt; 100

Array

[0] =&gt; Debra
[1] =&gt; Alex
[2] =&gt; Amanda
[3] =&gt; Jane

</ code> </ pre>

为什么第二个数组的排序不正确? 如果它是正确的,有人可以解释它是如何正确的吗?</ p>

谢谢。</ p>
</ div>

5个回答

Yes, it is correct. You are taking PHP's 'array_multisort' function in wrong way. It will not sort both arrays, but will sort the first array and the second array will have positioning in order corresponding to first array.

$numbers Before sort:

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

After sort:

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

So, the second array will not get sort but will get its elements positioned according to first array.

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

展开翻译

译文



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

$ numbers排序之前:</ p>
\ n

 
[0] =&gt; 10
[1] =&gt; 100
[2] =&gt; 100
[3] =&gt; 0

< / code> </ pre>

排序后:</ p>

 
[0] =&gt; 0(排序前的位置 - 第3位)
[1] =&gt; 10(排序前的位置 - 0)
[2] =&gt; 100(排序前的位置 - 2或1)
[3] =&gt; 100(排序前的位置 - 2或1)


</ code> </ pre>

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

 
[0] =&gt; Debra - 在第一个数组中第3个元素移动到第0个位置
[1] =&gt; Alex - 在第一个数组中第0个元素移动到第1个位置
[ 2] =&gt; Amanda - 在第一个数组第2个元素已经移动到第2个位置
[3] =&gt; Jane - 在第一个数组中第1个元素移动到第3个位置

</ code> </ pre>
</ div>

dsdsm2016
dsdsm2016 Ty的解释,我想现在为什么它甚至可以为两个数组添加排序参数? 因此,如果我要添加到第二个数组SORT_STRING,它将不会影响结果。
2 年多之前 回复
dpthuyh1678
dpthuyh1678 谢谢Rajat的详细解答。 我会尽快接受。
2 年多之前 回复

This is the expected behavior of array_multisort. The first array is sorted, and the second array is reoraganized so its values continue to correspond to the same values of the first array. Note that where the first array has equal values (the two 100s), the second array's values are sorted internally (so Amanda comes before Jane).

If you want to sort two arrays independently, you could just use two sort calls.

展开翻译

译文



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

如果要独立排序两个数组,可以使用两个 sort </ code> 来电。</ p>
</ div>

PHP's array_multisort works to sort first array and arrange second array according to the items of first array rather sort both.

展开翻译

译文



PHP的 array_multisort </ strong>用于排序第一个数组并根据第一个数组的项排列第二个数组而不是排序 。</ p>
</ div>

dongyuduan1890
dongyuduan1890 欢迎来到Stack Overflow。 虽然这可能是一个答案,但我建议为OP提供一个有效的例子。 如果没有人可能会标记这个答案。
2 年多之前 回复

its easy :

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

展开翻译

译文



很简单:


array_multisort($ names,SORT_ASC,SORT_STRING,


$ number ,SORT_NUMERIC,SORT_ASC);


print_r($ names); </ p>
</ div>

dtvnnhh8992
dtvnnhh8992 然后你使用multisort两次,这是一个完全不同的东西,并将工作。 无论如何,问题都得到了回答,所以这是非正式的。
2 年多之前 回复
dougou1127
dougou1127 array_multisort($ names,SORT_ASC,SORT_STRING); <br> array_multisort($ numbers);
2 年多之前 回复
douyulv6921
douyulv6921 是的,但检查数字数组,print_r($ numbers)这将是错误的。
2 年多之前 回复
dongpochi9741
dongpochi9741 这对我来说:数组([0] =>亚历克斯[1] =>阿曼达[2] =>黛布拉[3] =>简)
2 年多之前 回复
dptx8888
dptx8888 不会工作,相同的结果,只是打印数字,你看到一个是错的。
2 年多之前 回复

$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);

展开翻译

译文



$ numbers = array(10,100,100,0);

$ names = array(“Alex”, “简”,“阿曼达”,“黛布拉”);

array_multisort($ names,SORT_ASC,SORT_STRING);

array_multisort($ numbers);




print_r ($ names);

print_r($ numbers); </ p>
</ div>

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问