PHP sort()在数组上产生错误的结果


php sort() on array produces wrong result

我想排序一个数组,看起来像这样(按数字顺序,而不是1,10,11):

Array ( [0] => 1.jpg [1] => 10.jpg [2] => 11.jpg [3] => 111.jpg [4] => 12.jpg [5] => 12a.jpg [6] => 13.jpg [7] => 14.jpg [8] => 15.jpg [9] => 16.jpg [10] => 2.jpg [11] => 3.jpg [12] => 4.jpg [13] => 5.jpg [14] => 6.jpg [15] => 7.jpg [16] => 8.jpg [17] => 9.jpg )

当我使用sort()时,它只是变成"1"而不是一个排序数组。

代码:

$this->pageLinks = sort($this->pageLinks);  // the array is a property in a class     
print_r($this->pageLinks); // want to display the sorted array here but it just returns 1

sort()对数组进行就地排序。不要重新赋值。

正确的:

sort($this->pageLinks);

错误:

$this->pageLinks = sort($this->pageLinks);

数组通过引用传递给排序函数,因此不需要进行赋值操作。此外,sort()函数不返回已排序的数组;它返回一个成功或失败标志,这就是为什么你在变量中得到一个1(因为排序成功)。

因此,代码的第一行只需要看起来像这样:
sort($this->pageLinks);

其次,sort()函数默认按字母顺序排序。通过传递SORT_NUMERIC作为第二个参数,可以使它按数字顺序排序。考虑到PHP将字符串强制转换为整数的方式,这个可能在您的情况下适合您,但是由于您的值不是严格意义上的数字,您可能会发现需要手动进行转换。

如果是这种情况,那么您将需要使用usort()而不是sort(),并自己定义排序函数,其中比较两个值并返回排序顺序。关于usort()如何工作的更多信息,请参阅手册页。

你应该阅读sort()的手册,你给它一个数组的引用,它会工作的。不需要重新赋值

sort($array);

$array = sort($array);