Разработчику. Сборник рецептов PHP
Задавайте вопросы

Сортировка множества массивов

Вернуться назад

Задача

Необходимо отсортировать несколько массивов или многомерный массив.

Решение

Используйте функцию array_multisort(): Чтобы одновременно отсортировать несколько массивов, передайте это множество массивов функции array_multisort():

$colors = array('Red', 'White', 'Blue');
$cities = array('Boston', 'New York', 'Chicago');

array_multisort($colors, $cities);
print_r($colors);
print_r($cities);

Array
(
     [0] => Blue
     [1] => Red
     [2] => White
)
Array
(
     [0] => Chicago
     [1] => Boston
     [2] => New York
)

Чтобы отсортировать несколько измерений внутри одного массива, передайте определенные элементы массива:

$stuff = array('colors' => array('Red', 'White', 'Blue'),
                        'cities' => array('Boston', 'New York', 'Chicago'));

array_multisort($stuff['colors'], $stuff['cities']);
print_r($stuff);

Array
(
[colors] => Array
   (
         [0] => Blue
         [1] => Red
         [2] => White
   )

[cities] => Array
   (
         [0] => Chicago
         [1] => Boston
         [2] => New York
   )
)

Чтобы изменить тип сортировки, как в функции sort(), передайте SORT_REGULAR, SORT_NUMERIC или SORT_STRING после имени массива. Для изменения порядка сортировки, в отличие от функции sort(), передайте SORT_ASC или SORT_DESC после имени массива. Можно передать как тип, так и порядок сортировки.

Обсуждение

Функция array_multisort() может сортировать несколько массивов одновременно или многомерный массив по одному или более направлений. Массивы трактуются как колонки таблицы, которая должна быть отсортирована по строкам. Первый массив является главным массивом для сортировки; порядок всех элементов других массивов устанавливается на основе порядка сортировки первого массива. Если элементы первого массива равны, то их порядок определяется вторым массивом, и т. д.

По умолчанию устанавливаются значения сортировки SORT_REGULAR и SORT_ASC, и они переустанавливаются после каждого массива, поэтому нет необходимости передавать какое-либо из этих значений, разве что для ясности.

$numbers = array(0, 1, 2, 3);
$letters = array('a', 'b', 'c', 'd');
array_multisort($numbers, SORT_NUMERIC, SORT_DESC,
                           $letters, SORT_STRING , SORT_DESC);

Код этого примера обращает массивы.

См. также

О сортировке с помощью пользовательской функции; документацию по функции array_multisort() на http://www.php.net/array-multisort.

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования


Рейтинг Сайтов ДОСКИ.РУ