Справочник по PHP : Функции работы с данными : Работа с массивами : Сортировка массивов

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

Материал из Справочник Web-языков

Перейти к: навигация, поиск


Содержание

array_reverse

Расстановка элементов массива в обратном порядке.

Синтаксис:

array array_reverse(array arr [, bool preserve_keys])

Функция array_reverse() возвращает массив, элементы которого следуют в обратном порядке относительно массива, переданного в параметре. При этом связи между ключами и значениями не теряются, если дополнительный параметр preserve_keys = TRUE.

Пример использования функции array_reverse():

<?php
$input  = array("php", 4.0, array("green", "red"));
$result = array_reverse($input);
$result_keyed = array_reverse($input, true);
?>

Этот пример сделает оба массива $result и $result_keyed с одинаковыми значениями, но различными ключами. Распечатка массивов $result и $result_keyed будет следующей:

Array
(
    [0] => Array
        (
            [0] => green
            [1] => red
        )

    [1] => 4
    [2] => php
)
Array
(
    [2] => Array
        (
            [0] => green
            [1] => red
        )

    [1] => 4
    [0] => php
)

Примечание: Второй параметр preserve_keys был добавлен в PHP 4.0.3.

Функция поддерживается PHP 4, PHP 5

shuffle

Перемешивание элементов массива.

Синтаксис:

void shuffle(array arr)

Функция shuffle() "перемешивает" список, переданный ей первым параметром arr, так, чтобы его значения распределялись случайным образом. При этом измениться сам массив и ассоциативные массивы воспринимаются как списки.

Пример использования функции shuffle():

<?php
$numbers = range(1, 20);
srand((float)microtime() * 1000000);
shuffle($numbers);
while (list(, $number) = each($numbers)) {
    echo "$number ";
}
?>

Замечание: Начиная с PHP 4.2.0, больше нет необходимости инициализировать генератор случайных чисел функциями srand() или mt_srand(), поскольку теперь это происходит автоматически.

Функция поддерживается PHP 3 >= 3.0.8, PHP 4, PHP 5

sort

Сортировка массива по возрастанию.

Синтаксис:

bool sort(array arr [, int sort_flags])

Функция sort() предназначена для сортировки массивов в порядке возрастания.

Замечание: Эта функция изменяет ключи у отсортированных значений. Т.е. любой ассоциативный массив воспринимается этой функцией как список. После упорядочивания последовательность ключей превращается в 0,1,2,..., а значения нужным образом перераспределяются. Как видим, связи между параметрами ключ=>значение не сохраняются, более того - ключи просто пропадают, поэтому сортировать что-либо, отличное от списка, вряд ли целесообразно.

Пример использования функции sort():

<?php
$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);
reset($fruits);
while (list($key, $val) = each($fruits)) {
    echo "fruits[" . $key . "] = " . $val . "n";
}
?>

Этот пример выведет:

fruits[0] = apple
fruits[1] = banana
fruits[2] = lemon
fruits[3] = orange

Аргумент sort_flags задает следующие флаги сортировки:

  • SORT_REGULAR - сравнивает элементы "как есть";
  • SORT_NUMERIC - сравнивает элементы как числа;
  • SORT_STRING - сравнивает элементы как строки.

Функция поддерживается PHP 3, PHP 4, PHP 5

rsort

Сортировка массива по убыванию.

Синтаксис:

bool rsort ( array array [, int sort_flags])

Функция rsort() сортирует массив array в порядке убывания (от высших значений к низшим).

Функция возвращает TRUE в случае успешного завершения, и FALSE в противном случае.

Пример использования функции rsort():

<?php
$fruits = array("lemon", "orange", "banana", "apple");
rsort($fruits);
reset($fruits);
while (list($key, $val) = each($fruits)) {
    echo "$key = $valn";
}
?>

Этот пример выведет:

0 = orange
1 = lemon
2 = banana
3 = apple

Аргумент sort_flags задает следующие флаги сортировки:

  • SORT_REGULAR - сравнивает элементы "как есть"
  • SORT_NUMERIC - сравнивает элементы как числа
  • SORT_STRING - сравнивает элементы как строки

Функция поддерживается PHP 3, PHP 4, PHP 5

asort

Сортировка ассоциативного массива по возрастанию.

Синтаксис:

bool asort(array arr [, int sort_flags])

Функция asort() сортирует массив, указанный в ее параметре, так, чтобы его значения шли в алфавитном (если это строки) или возрастающем (для чисел) порядке. При этом сохраняются связи между ключами и соответствующими им значениями, т.е. некоторые пары ключ=>значение просто "всплывают" наверх, а некоторые - наоборот, "опускаются".

Функция возвращает true в случае успешного завершения, и false в случае возникновения ошибки.

Пример использования функции asort():

<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
asort($fruits);
reset($fruits);
while (list($key, $val) = each($fruits)) {
    echo "$key = $valn";
}
?>

Пример выведет следующее:

c = apple
b = banana
d = lemon
a = orange

Массив $fruits был отсортирован в возрастающем символьном порядке, при этом индексы массива были сохранены.

Метод сортировки может быть изменен при помощи необязательного параметра sort_flags.

Этот параметр может указать, как сравнивать значения (как строки или как числа). Он может принимать следующие предопределенные значения:

  • SORT_REGULAR - нормальное сравение значений;
  • SORT_NUMERIC - сравнивать как числа;
  • SORT_STRING - сравнивать как строки.

Этот параметр был введен в PHP начиная с 4 версии.

Функция поддерживается PHP 3, PHP 4, PHP 5

arsort

Сортировка ассоциативного массива по убыванию.

Синтаксис:

bool arsort(array arr [, int sort_flags])

Функция arsort() сортирует массив arr по убыванию с сохранением индексных ассоциаций.

Эта функция используется главным образом там, где существенен порядок элемента в массиве.

Функция возвращает true в случае успешной сортировки, и false в случае возникновения ошибки.

Пример использования функции arsort():

$arr=array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
arsort($arr);
reset($arr);
while(list ($key, $val) = each ($arr)) {
  echo "$key = $val
l"; }

Пример выведет:

a = orange
d = lemon
b = banana
c = apple

Массив $arr был отсортирован в убывающем символьном порядке, при этом индексы массива были сохранены.

Метод сортировки может быть изменен при помощи необязательного параметра sort_flags.

Этот параметр может указать, как сравнивать значения (как строки или как числа). Он может принимать следующие предопределенные значения:

  • SORT_REGULAR - нормальное сравение значений;
  • SORT_NUMERIC - сравнивать как числа;
  • SORT_STRING - сравнивать как строки.

Этот параметр был введен в PHP начиная с 4 версии.

Функция поддерживается PHP 3, PHP 4, PHP 5

ksort

Сортировка массива по возрастанию ключей.

Синтаксис:

bool ksort(array arr [, int sort_flags])

Функция ksort() сортирует массив в порядке возрастания ключей с сохранением взаимосвязей ключей и значений. Эта функция особенно полезна при сортировке ассоциативных массивов.

Функция возвратит true, если все прошло успешно, и false в противном случае.

Пример использования функции ksort():

<?php
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits);
reset($fruits);
while (list($key, $val) = each($fruits)) {
    echo "$key = $valn";
}
?>

Данный пример выведет:

a = orange
b = banana
c = apple
d = lemon

Аргумент sort_flags задает следующие флаги сортировки:

  • SORT_REGULAR - сравнивает элементы "как есть"
  • SORT_NUMERIC - сравнивает элементы как числа
  • SORT_STRING - сравнивает элементы как строки

Функция поддерживается PHP 3, PHP 4, PHP 5

krsort

Сортировка массива по убыванию индексов.

Синтаксис:

bool krsort(array arr [, int sort_flags])

Функция krsort() сортирует ключи в массиве arr в обратном порядке. При этом связка ключей и значений сохраняется. Эта функци полезна при сортировке ассоциативных массивов.

Функция возвращает true в случае успешного завершения, и false в противном случае.

Пример использования функции krsort():

<?php
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
krsort($fruits);
reset($fruits);
while (list($key, $val) = each($fruits)) {
    echo "$key = $valn";
}
?>

Данный пример выведет:

d = lemon
c = apple
b = banana
a = orange

Аргумент sort_flags задает следующие флаги сортировки:

  • SORT_REGULAR - сравнивает элементы "как есть"
  • SORT_NUMERIC - сравнивает элементы как числа
  • SORT_STRING - сравнивает элементы как строки

Функция поддерживается PHP 3 >= 3.0.13, PHP 4, PHP 5

natsort

Выполняет "естественную" сортировку массива.

Синтаксис:

void natsort(array arr)

Функция natsort() сортирует массив arr в естественном для человека порядке с сохранением индексных ассициаций.

Пример использования функции natsort():

<?php
$array1 = $array2 = array("img12.png", "img10.png", "img2.png", "img1.png");

sort($array1);
echo "Стандартная сортировка\n";
print_r($array1);

natsort($array2);
echo "\nЕстественная сортировка\n";
print_r($array2);
?>

Этот пример выведет следующее:

Стандартная сортировка
Array
(
    [0] => img1.png
    [1] => img10.png
    [2] => img12.png
    [3] => img2.png
)

Естественная сортировка
Array
(
    [3] => img1.png
    [2] => img2.png
    [1] => img10.png
    [0] => img12.png
)

Функция поддерживается PHP 4, PHP 5

natcasesort

Выполняет естественную сортировку массива без учета регистра символов.

Синтаксис:

void natcasesort(array arr)

Функция natcasesort() сортирует массив arr в естественном для человека порядке с сохранением индексных ассициаций.

Эта функция схожа с natsort(), только не учитывает регистр символов.

Пример использования функции natcasesort():

<?php
$array1 = $array2 = array("IMG0.png", "img12.png", "img10.png",
                          "img2.png", "img1.png", "IMG3.png");

sort($array1);
echo "Стандартная сортировка\n";
print_r($array1);

natcasesort($array2);
echo "\nЕстественная сортировка (без учета регистра)\n";
print_r($array2);
?>

Приведенный пример выведет следующее:

Стандартная сортировка
Array
(
    [0] => IMG0.png
    [1] => IMG3.png
    [2] => img1.png
    [3] => img10.png
    [4] => img12.png
    [5] => img2.png
)

Естественная сортировка (без учета регистра)
Array
(
    [0] => IMG0.png
    [4] => img1.png
    [3] => img2.png
    [5] => IMG3.png
    [2] => img10.png
    [1] => img12.png
)

Функция поддерживается PHP 4, PHP 5

uasort

Пользовательская сортировка ассоциативного массива с сохранением индексных ассоциаций.

Синтаксис:

bool uasort(array arr, function cmp_function)

Функция uasort() сортирует массив arr с сохранением индексных ассоциаций, используя для сравнения индексов элементов пользовательскую функцию, указанную аргументом cmp_function.

Эта функция используется главным образом когда соответствие индексов и значений массива существенно.

Функция uasort() возвращает true в случае успешного завершения сортировки, и false в противном случае.

Замечание: Смотрите функции usort() и uksort() для написания пользовательской функции.

Функция поддерживается PHP 3 >=3.0.4, PHP 4, PHP 5

uksort

Пользовательская сортировка массива по ключам.

Синтаксис:

bool uksort(array arr, function cmp_function)

Функция uksort() сортирует массив arr по индексам с сохранением индексных ассоциаций, используя для сравнения индексов элементов пользовательскую функцию, указанную в аргументе cmp_function. В эту функцию передаются два сравниваемых индекса элементов, а она должна вернуть положительное или отрицательное число или 0.

Функция uksort() возвращает true в случае успешного завершения сортировки, и FALSE в противном случае.

Довольно часто нам приходится сортировать что-то по более сложному критерию, чем просто по алфавиту. Например, пусть в $Files храниться список имен файлов и подкаталогов в текущем каталоге. Возможно, мы захотим вывести этот список не только в лексографическом порядке, но также чтобы все каталоги предшествовали файлам. В этом случае нам стоит воспользоваться функцией uksort(), написав предварительно функцию сравнения с двумя параметрами, как того требует uksort().

1 пример использования функции uksort():

// Эта функция должна сравнивать значения $f1 и $f2 и возвращать:
// -1, если $f1<$f2,
//  0, если $f1==$f2
//  1, если $f1>$f2
// Под < и > понимаем следование этих имен в выводимом списке
function FCmp($f1,$f2)
{ // Каталог всегда предшествует файлу
  if(is_dir($f1) && !is_dir($f2)) return -1;
  // Файл всегда идет после каталога
  if(!is_dir($f1) && is_dir($f2)) return 1;
  // Иначе сравниваем лексиграфически
  if($f1<$f2) return -1; elseif($f1>$f2) return 1; else return 0;
}
// Пусть $Files содержит массив с ключами - именами файлов
// в текущем каталоге. Отсортируем его.
uksort($Files,"FCmp");  //передаем функцию сортировки "по ссылке"

2 пример использования функции uksort():

<?php
function cmp($a, $b) 
{
    if ($a == $b) {
        return 0;
    }
    return ($a > $b) ? -1 : 1;
}

$a = array(4 => "four", 3 => "three", 20 => "twenty", 10 => "ten");

uksort($a, "cmp");

while (list($key, $value) = each($a)) {
    echo "$key: $valuen";
}
?>

Этот пример выведет:

20: twenty
10: ten
4: four
3: three

Функция поддерживается PHP 3 >=3.0.4, PHP 4, PHP 5

usort

Пользоваетльская сортировка значений массива.

Синтаксис:

bool usort(array arr, callback cmp_function)

Функция usort() сортирует массив arr без сохраненя индексных ассоциаций, используя для сравнения значений пользовательскую функцию, указанную в аргументе cmp_function. В эту функцию передаются два сравниваемых индекса элементов, а она должна вернуть положительное или отрицательное число или 0.

Эта функция как бы является "гибридом" функций uasort() и sort(). От sort() она отличается тем, что критерий сравнения обеспечивается пользовательской функцией. А от uasort() - тем, что она не сохраняет связей между ключами и значениями, а потому пригодна разве что для сортировки списков.

Пример использования функции usort():

<?php
function cmp($a, $b) 
{
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

$a = array(3, 2, 5, 6, 1);

usort($a, "cmp");

while (list($key, $value) = each($a)) {
    echo "$key: $valuen";
}
?>

Пример одномерного массива:

function cmp($a, $b) {
  if($a==$b) return 0;
  return ($a > $b) ? -1 : 1;
}
$a=array (3,2,5,6,1);
usort($a, "cmp");
while(list($key,$val)=each($a)) {
  echo "$key: $valn";
}

При выполнении будет напечатано:

0: 6
1: 5
2: 3
3: 2
4: 1

Пример многомерного массива:

function cmp($a,$b) {
  return strcmp($a["fruit"],$b["fruit"]);
};
$fruit[0]["fruit"]="lemons";
$fruit[1]["fruit"]="apples";
$fruit[2]["fruit"]="grapes";

usort($fruit, "cmp");

while(list($key,$val)=each($fruit)) {
  echo "$fruit[$key]:".$val["fruit"]."n";
}

При сортировке многомерных массивов $a и $b содержит ссылки на первый индекс массива.

Будет напечатано:

$fruit[0]: apples
$fruit[1]: grapes
$fruit[2]: lemons

Если необходимо отсортировать массив с различными вторыми ключами, можно поступить следующим образом:

<?php
function arr_sort($a,$b) {
  list($key1,$val)=each($a);
  list($key2,$val)=each($b);
  return strcmp($a[$key1],$b[$key2]);
};

$arr[0]["1-ый элемент"]="яблока";
$arr[1]["2-ый элемент"]="груша";
$arr[2]["3-ый элемент"]="персик";
$arr[3]["4-ый элемент"]="дыня";
$arr[4]["5-ый элемент"]="малина";
$arr[5]["6-ый элемент"]="ананас";

usort($arr,"arr_sort");

echo "
";
print_r($arr);
echo "
"; ?>

Приведенный скрипт выведет следующее:

Array
(
    [0] => Array
        (
            [6-ый элемент] => ананас
        )

    [1] => Array
        (
            [2-ый элемент] => груша
        )

    [2] => Array
        (
            [4-ый элемент] => дыня
        )

    [3] => Array
        (
            [5-ый элемент] => малина
        )

    [4] => Array
        (
            [3-ый элемент] => персик
        )

    [5] => Array
        (
            [1-ый элемент] => яблока
        )
)

Функция поддерживается PHP 3 >=3.0.3, PHP 4, PHP 5

array_multisort

Сортировка нескольких массивов или многомерного массива.

Синтаксис:

bool array_multisort(array ar1, [, mixed arg [, mixed ... [, array ...]]])

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

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

Флаги определения порядка сортировки:

  • SORT_ASC - сортировка в порядке возрастания (по умолчанию)
  • SORT_DESC - сортировка в порядке убывания

Флаги типа сортировки:

  • SORT_REGULAR - сравнивать элементы как есть (по умолчанию)
  • SORT_NUMERIC - сравнивать элементы как числа
  • SORT_STRING - сравнивать элементы как строки

Уазание несколько флагов сортировки после одного массива недопустимо. Флаги сортировки, которые переются после аргумента arr применяются только к этому аргументу. Если после следующего аргумента флаги не указаны, то принимаются флаги по умолчанию (SORT_ASC, SORT_REGULAR).

Пример использования функции array_multisort():

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

ar1 = array("10", 100, 100, "a");
ar2 = array(1, 3, "2", 1);
array_multisort($ar1, $ar2);
  // $ar1 = array("10", "a", 100, 100);
  // $ar2 = array(1, 1, "2", 3);

Элементы второго массива, соответствующие одинаковым элементам (100 и 100) первого массива, также отсортированны.

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

$ar = array(array("10", 100, 100, "a"), array(1, 3, "2", 1));
array_multisort($ar[0], SORT_ASC, SORT_STRING, 
                   $ar[1], $SORT_NUMERIC, SORT_DESC);

// $ar[0] = ("10", 100, 100, "a") - сортируются как строки по возрастанию
// $ar[1] = (1, 3, "2", 1) - сортируются как числа по убыванию

Функция поддерживается PHP 4, PHP 5

Добавить страницу в закладки:
РАЗРЕШАЕТСЯ перепечатывать и копировать информацию ТОЛЬКО ПРИ РАЗМЕЩЕНИИ ссылки на оригинал!
(<A href="http://www.spravkaweb.ru/">Справочник Web-языков</A>)
другие проекты
Rambler\'s Top100 Индекс цитирования