【问题标题】:php sort() on array produces wrong result数组上的 php sort() 产生错误的结果
【发布时间】:2011-09-22 15:20:30
【问题描述】:

我想对一个看起来像这样的数组进行排序(按数字顺序而不是 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 在成功时返回 true。它将排序应用于您传入的数组。您无需再次执行分配。
  • 如果你使用了一个函数并且它没有像你预期的那样工作(猜测),你应该首先阅读关于函数的手册以了解所有细节。请在此处提问之前这样做。
  • @Xeoncross - 与什么不一致?有很多语言可以进行数组就地排序,PHP 的所有排序函数都可以就地进行排序。
  • 您想要的排序在您的问题中似乎含糊不清。您能否(为了所有未来读者的利益)改进您的问题以提供“无序”输入数组和您想要的输出数组?

标签: php arrays sorting


【解决方案1】:

sort() 对数组进行就地排序。不要重新分配它。

正确:

sort($this->pageLinks);

不正确:

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

【讨论】:

    【解决方案2】:

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

    因此,您的代码的第一行只需如下所示:

    sort($this->pageLinks);
    

    其次,sort() 函数默认按字母顺序排序。通过将SORT_NUMERIC 作为第二个参数传递,可以使其按数字顺序排序。鉴于 PHP 将字符串转换为整数的方式,这可能仅适用于您的情况,但由于您的值不是严格的数字,您可能会发现您需要手动进行转换。 p>

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

    【讨论】:

      【解决方案3】:

      你应该阅读sort() 上的手册,你给它一个数组的参考,它会工作的。无需重新分配。

      sort($array);
      

      而不是

      $array = sort($array);
      

      【讨论】:

        猜你喜欢
        • 2014-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-21
        • 2016-02-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多