Сортировка массивов
Сортировка массивов
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] = applefruits[1] = bananafruits[2] = lemonfruits[3] = orange
Аргумент sort_flags задает следующие флаги сортировки:
Функция поддерживается 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 = orange1 = lemon2 = banana3 = apple
Аргумент sort_flags задает следующие флаги сортировки:
Функция поддерживается 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 = appleb = bananad = lemona = orange
Массив $fruits был отсортирован в возрастающем символьном порядке, при этом индексы массива были сохранены.
Метод сортировки может быть изменен при помощи необязательного параметра sort_flags.
Этот параметр может указать, как сравнивать значения (как строки или как числа). Он может принимать следующие предопределенные значения:
Этот параметр был введен в 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<BR>l";
}
Пример выведет:
a = oranged = lemonb = bananac = apple
Массив $arr был отсортирован в убывающем символьном порядке, при этом индексы массива были сохранены.
Метод сортировки может быть изменен при помощи необязательного параметра sort_flags.
Этот параметр может указать, как сравнивать значения (как строки или как числа). Он может принимать следующие предопределенные значения:
Этот параметр был введен в 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 = orangeb = bananac = appled = lemon
Аргумент sort_flags задает следующие флаги сортировки:
Функция поддерживается 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 = lemonc = appleb = bananaa = orange
Аргумент sort_flags задает следующие флаги сортировки:
Функция поддерживается 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: twenty10: ten4: four3: 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: 61: 52: 33: 24: 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 "<pre>";
print_r($arr);
echo "</pre>";
?>
Приведенный скрипт выведет следующее:
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 при отсутствии ошибок.
Исходные массивы рассматриваются как столбцы таблицы, сортируемой построчно. Поэтому массивы должны иметь одинаковое число элементов, и взаимосвязь между ними, как в строках таблицы, сохраняется. Приоритетом сортировки пользуются первые массивы. Флаги сортировки могут указваться для каждого массива, и их действие распространяется только на тот массив, после которого они указаны.
Флаги определения порядка сортировки:
Флаги типа сортировки:
Уазание несколько флагов сортировки после одного массива недопустимо. Флаги сортировки, которые переются после аргумента 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
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Тема №13. Сортировка массивов
Тема №13. Сортировка массивов Тема имеет исключительно важное значение Первой серьезной задачей программирования, с которой сталкивается начинающий программист – это задача сортировки массива. Под сортировкой понимается упорядочивание элементов массива по
Создание массивов
Создание массивов Массивом называют множество однородных предметов, образующих единое целое. Массивы программы AutoCAD – это совокупность копий одного объекта, расположенных на равном расстоянии друг от друга. Так как массивы связаны со смещением координат, они могут быть
8.1.4. Сравнение массивов
8.1.4. Сравнение массивов При сравнении массивов возможны неожиданности — будьте осторожны!Для сравнения массивов служит метод экземпляра <=>. Он работает так же, как в других контекстах, то есть возвращает -1 (меньше), 0 (равно) или 1 (больше). Методы == и != опираются на
8.1.13. Преобразование или отображение массивов
8.1.13. Преобразование или отображение массивов Метод collect из модуля Enumerable часто позволяет сэкономить время и силы. Тем, кто привык к языку Smalltalk, он покажется интуитивно очевидным в большей степени, чем программистам на С.Этот метод просто воздействует неким произвольным
8.1.22. Чередование массивов
8.1.22. Чередование массивов Предположим, что есть два массива и надо построить из них третий, который содержит массивы из двух элементов, взятых из соответственных позиций исходных массивов. В последних версиях Ruby модуль Enumerable содержит метод zip:a = [1, 2, 3, 4]b = ["a", "b", "c", "d"]с =
8.1.25. Синхронная сортировка нескольких массивов
8.1.25. Синхронная сортировка нескольких массивов Предположим, что необходимо отсортировать массив, которому соответствуют «параллельные» массивы, то есть в соответственных позициях находятся логически связанные данные. Не хотелось бы, чтобы в результате сортировки это
УКАЗАТЕЛИ МАССИВОВ
УКАЗАТЕЛИ МАССИВОВ Как было сказано в гл. 9, указатели позволяют нам работать с символическими адресами. Поскольку в реализуемых аппаратно командах вычислительной машины интенсивно используются адреса, указатели предоставляют возможность применять адреса
Типы массивов
Типы массивов Firebird позволяет создавать однородные массивы для большинства типов данных. Использование массива позволяет хранить множество элементов данных в виде дискретных, многомерных элементов в одном столбце. Firebird может выполнять операции над целым массивом,
Определение массивов
Определение массивов Массив может быть определен как домен (с использованием CREATE DOMAIN) или как столбец в операторе CREATE TABLE или ALTER TABLE. Определение домена или столбца как массива похоже на определение любого другого такого объекта, здесь только добавляется указание
Хранение столбцов массивов
Хранение столбцов массивов Как и другие типы данных, реализованные как BLOB, Firebird хранит идентификатор массива в столбце таблицы базы данных, который ссылается на страницу, содержащую фактические данные.ОбновленияКак и в случае других типов BLOB, сервер Firebird не может
Создание массивов
Создание массивов Массивом называют множество однородных предметов, образующих единое целое. Массивы программы AutoCAD – это совокупность копий одного объекта, расположенных на равном расстоянии друг от друга. Так как массивы связаны со смещением координат, они могут быть
Ревизия массивов
Ревизия массивов Набросок библиотечного класса ARRAY дан в предыдущей лекции. Теперь мы в состоянии дать ему подходящее определение. Фундаментальное понятие массива требует задания предусловий, постусловий и инварианта.Приведем улучшенный, но все еще схематичный