为什么在PHP 7中sort()以相反的顺序使用SORT_NUMERIC?

时间:2019-02-19 11:05:20

标签: php sorting quicksort

如果我像这样使用sort()来使用SORT_NUMERIC

<?php

$array1 = $array2 = array("img12.png", "img10.png", "img2.png", "img1.png");

sort($array1, SORT_NUMERIC);

print_r($array1);

在PHP 5.5 / 5.6中,输出按升序排列(如预期):

  

数组([0] => img1.png [1] => img2.png [2] => img10.png [3] => img12.png)

但是在PHP 7中却是相反的顺序:

  

数组([0] => img12.png [1] => img10.png [2] => img2.png [3] => img1.png)

为什么sort()在PHP 7中以相反的顺序使用SORT_NUMERIC

2 个答案:

答案 0 :(得分:1)

$ array1 = array(“ img10.png”,“ img12.png”,“ img2.png”,“ img1.png”);

sort($ array1,SORT_NATURAL);

print_r($ array1);

将给出结果 数组([0] => img1.png [1] => img2.png [2] => img10.png [3] => img12.png)

答案 1 :(得分:0)

由于数组值不是严格的数值,因此在这种情况下,PHP 7根本无法排序。

<?php
$array1 = $array2 = array("img12.png", "img2.png", "img10.png", "img1.png");
sort($array1, SORT_NUMERIC);
print_r($array1);
  

数组([0] => img12.png [1] => img2.png [2] => img10.png [3] => img1.png)

<?php
$array1 = $array2 = array("12", "2", "10", "1");
sort($array1, SORT_NUMERIC);
print_r($array1);
  

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

改为使用natsort()http://php.net/manual/en/function.natsort.php