array_multisort

(PHP 4, PHP 5)

array_multisortСортирует несколько массивов или многомерные массивы

Описание

bool array_multisort ( array &$arr [, mixed $arg = SORT_ASC [, mixed $arg = SORT_REGULAR [, mixed $... ]]] )

Функция array_multisort() может быть использована для сортировки сразу нескольких массивов или одного многомерного массива в соответствии с одной или несколькими размерностями.

Ассоциативные (string) ключи будут сохранены, но числовые ключи будут переиндексированы.

Список параметров

arr

Сортируемый массив (array).

arg

Необязательные другие массивы (array), или опции сортировки для предыдущего аргумента (array): SORT_ASC, SORT_DESC, SORT_REGULAR, SORT_NUMERIC, SORT_STRING.

...

Дополнительные параметры (arg).

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Примеры

Пример #1 Сортировка нескольких массивов

<?php
$ar1 
= array(101001000);
$ar2 = array(1324);
array_multisort($ar1$ar2);

var_dump($ar1);
var_dump($ar2);
?>

В вышеприведенном примере, после того, как будет осуществлена сортировка, первый массив будет содержать 0, 10, 100, 100. Второй - 4, 1, 2, 3. Элементы второго массива, соответствующие идентичным элементам первого (100 и 100), также будут отсортированы.

array(4) {
  [0]=> int(0)
  [1]=> int(10)
  [2]=> int(100)
  [3]=> int(100)
}
array(4) {
  [0]=> int(4)
  [1]=> int(1)
  [2]=> int(2)
  [3]=> int(3)
}

Пример #2 Сортировка многомерного массива

<?php
$ar 
= array(
       array(
"10"11100100"a"),
       array(   
1,  2"2",   3,   1)
      );
array_multisort($ar[0], SORT_ASCSORT_STRING,
                
$ar[1], SORT_NUMERICSORT_DESC);
var_dump($ar);
?>

В вышеприведенном примере, после сортировки, первый массив будет содержать "10", 100, 100, 11, "a" (его элементы были отсортированы в возрастающем порядке), а второй массив будет содержать 1, 3, "2", 2, 1 (элементы отсортированы как числа, в порядке убывания).

array(2) {
  [0]=> array(5) {
    [0]=> string(2) "10"
    [1]=> int(100)
    [2]=> int(100)
    [3]=> int(11)
    [4]=> string(1) "a"
  }
  [1]=> array(5) {
    [0]=> int(1)
    [1]=> int(3)
    [2]=> string(1) "2"
    [3]=> int(2)
    [4]=> int(1)
  }
}

Пример #3 Сортировка результатов из базы данных

В этом примере, каждый элемент массива data представляет собой ряд таблицы. Такой тип данных типичен для записей базы данных.

Примерные данные:

# том  | издание
volume | edition
-------+--------
    67 |       2
    86 |       1
    85 |       6
    98 |       2
    86 |       6
    67 |       7

Данные представлены в виде массива с именем data. Обычно их можно получить, к пример, с помощью цикла из функции mysql_fetch_assoc().

<?php
$data
[] = array('volume' => 67'edition' => 2);
$data[] = array('volume' => 86'edition' => 1);
$data[] = array('volume' => 85'edition' => 6);
$data[] = array('volume' => 98'edition' => 2);
$data[] = array('volume' => 86'edition' => 6);
$data[] = array('volume' => 67'edition' => 7);
?>

В нашем примере мы будем сортировать по volume в убывающем порядке, а по edition - в возрастающем.

У нас есть массив строк, но array_multisort() необходим массив столбцов, поэтому сначала мы используем следующий код для получения столбцов, а потом выполним сортировку.

<?php
// Получение списка столбцов
foreach ($data as $key => $row) {
    
$volume[$key]  = $row['volume'];
    
$edition[$key] = $row['edition'];
}

// Сортируем данные по volume по убыванию и по edition по возрастанию
// Добавляем $data в качестве последнего параметра, для сортировки по общему ключу
array_multisort($volumeSORT_DESC$editionSORT_ASC$data);
?>

Теперь данные отсортированы и будут выглядеть вот так:

volume | edition
-------+--------
    98 |       2
    86 |       1
    86 |       6
    85 |       6
    67 |       2
    67 |       7

Пример #4 Сортировка без учета регистра

Обе константы SORT_STRING и SORT_REGULAR учитывают регистр при сортировке, строки, начинающиеся с заглавной буквы будут выставлены раньше строк, начинающихся со строчной буквы.

Для выполнения безрегистрового поиска нужно заставить выполнить порядок сортировки по копии оригинального массива, переведенного в нижний регистр.

<?php
$array 
= array('Alpha''atomic''Beta''bank');
$array_lowercase array_map('strtolower'$array);

array_multisort($array_lowercaseSORT_ASCSORT_STRING$array);

print_r($array);
?>

Результат выполнения данного примера:

Array
(
    [0] => Alpha
    [1] => atomic
    [2] => bank
    [3] => Beta
)

Смотрите также


Участник рейтинга Тэглайн 2010