php sort () для массива дает неверный результат - PullRequest
1 голос
/ 22 сентября 2011

Я хочу отсортировать массив, который выглядит следующим образом (по порядку номеров вместо 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

Ответы [ 3 ]

10 голосов
/ 22 сентября 2011

sort() сортирует массив на месте. Не переназначать его.

Правильно:

sort($this->pageLinks);

Неправильно:

$this->pageLinks = sort($this->pageLinks);
3 голосов
/ 22 сентября 2011

Массив передается в функцию сортировки по ссылке, поэтому вам не нужно выполнять присваивание.Кроме того, функция sort() не возвращает отсортированный массив;он возвращает флаг успеха или неудачи, поэтому вы получаете 1 в переменной (потому что сортировка прошла успешно).

Поэтому первая строка вашего кода должна выглядеть так:

sort($this->pageLinks);

Во-вторых, функция sort() будет сортировать по алфавиту по умолчанию.Его можно отсортировать в числовой последовательности, передав SORT_NUMERIC в качестве второго параметра.Учитывая способ, которым PHP преобразует строки в целые числа, это может просто работать для вас в вашем случае, но поскольку ваши значения не являются строго числами, вы можете обнаружить, что вам нужно выполнить преобразование вручную.

Если это так, то вам нужно будет использовать usort() вместо sort() и самостоятельно определить функцию сортировки, где вы сравниваете два значения и возвращаете порядок сортировки.См. страницу руководства для usort () для получения дополнительной информации о том, как это работает.

1 голос
/ 22 сентября 2011

Вам следует прочитать руководство по sort(), вы дадите ему ссылку на массив, и он будет работать с ним. Нет необходимости переназначать его.

sort($array);

а не

$array = sort($array);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...