- Сортировка массивов
- Сортировка массива по ключу
- Результат:
- Сортировка массива по значению
- Результат:
- Результат:
- Естественная сортировка
- Результат:
- Результат:
- Сортировка многомерных массивов
- Результат:
- Сортировка многомерного массива по значению одного ключа
- Результат:
- Перемешать массив
- Результат:
- Php сортировка строк алфавиту
- Результат сортировки массива по алфавиту в латинице, в php
- Сортировать массив в php — латиница, в обратную сторону.
- Результат сортировки массива по алфавиту в обратную сторону, в php
- Сортировать смешанный массив в php — латинице.
- Результат сортировки массива с прописными и строчными буквами латинице:
- Сортируем массив в php — кириллица.
- Результат сортировки массива в кириллице:
- Сортируем массив в php — кириллица, в обратную сторону.
- Результат сортировки массива в кириллице, в обратную сторону:
- Сортировать смешанный массив в php — кириллице.
- Погнали!
- Результат сортировки смешанного массива в кириллице:
- Php сортировка строк алфавиту
- Функция is_array
- Функции count/sizeof
- Функции shuffle
- Функции compact
- Сортировка массивов
- Сортировка по ключам
- Естественная сортировка
Сортировка массивов
В продолжении темы работы с массивами поговорим о типичной задаче – их сортировке. Для ее выполнения в PHP существует множество функций, их подробное описание можно посмотреть на php.net, рассмотрим некоторые примеры.
Сортировка массива по ключу
ksort() и krsort() – сортирует массив по ключу.
$array = array( 3 => 'яблоко', 1 => 'апельсин', 5 => 'виноград' ); // По возрастанию: ksort($array); print_r($array); // По убыванию: krsort($array); print_r($array);
Результат:
Array ( [1] => апельсин [3] => яблоко [5] => виноград ) Array ( [5] => виноград [3] => яблоко [1] => апельсин )
Сортировка массива по значению
Функции sort() и rsort() сортирует массив по значению, при этом не сохраняя ключи.
$array = array( 3 => 'яблоко', 1 => 'апельсин', 5 => 'виноград' ); // По возрастанию: sort($array); print_r($array); // По убыванию: rsort($array); print_r($array);
Результат:
Array ( [0] => апельсин [1] => виноград [2] => яблоко ) Array ( [0] => яблоко [1] => виноград [2] => апельсин )
Чтобы сохранить ключи применяется функции asort() и arsort() .
$array = array( 3 => 'яблоко', 1 => 'апельсин', 5 => 'виноград' ); // По возрастанию: asort($array); print_r($array); // По убыванию: arsort($array); print_r($array);
Результат:
Array ( [1] => апельсин [5] => виноград [3] => яблоко ) Array ( [3] => яблоко [5] => виноград [1] => апельсин )
Естественная сортировка
Выше приведенные функции по умолчанию используют алгоритм Quicksort (быстрая сортировка). Чтобы изменить алгоритм нужно вторым аргументом указать флаг:
SORT_REGULAR | Обычное сравнение элементов (без изменения типов) |
SORT_NUMERIC | Числовое сравнение элементов |
SORT_STRING | Строковое сравнение элементов |
SORT_LOCALE_STRING | Сравнивает элементы как строки с учетом текущей локали. |
SORT_NATURAL | Также как natsort() |
SORT_FLAG_CASE | Может быть объединен с SORT_STRING или SORT_NATURAL для сортировки строк без учета регистра. |
Привычную для человека сортировку делают функции natsort() , natcasesort() или флаг SORT_NATURAL .
natcasesort() сортирует массив без учета регистра символов.
Разницу можно увидеть в примере:
$array = array(-1, 0, 10, 'текст', 'a', 'b'); // Quicksort: sort($array); print_r($array); // Natural order: natsort($array); print_r($array);
Результат:
Array ( [0] => -1 [1] => a [2] => b [3] => 0 [4] => текст [5] => 10 ) Array ( [0] => -1 [1] => 0 [2] => 10 [4] => a [5] => b [3] => текст )
У natsort() нет возможности изменить направление сортировки, поэтому можно применить функцию array_reverse() .
natsort($array); $array = array_reverse($array); print_r($array);
Результат:
Array ( [0] => текст [1] => b [2] => a [3] => 10 [4] => 0 [5] => -1 )
Сортировка многомерных массивов
array_multisort() сортирует многомерные массивы по значению, также может отсортировать сразу несколько массивов.
$array = array( array(20, 222, 2, 22), array(10, 111, 1, 11), ); array_multisort($array); print_r($array);
Результат:
Array ( [0] => Array( [0] => 10 [1] => 111 [2] => 1 [3] => 11 ) [1] => Array( [0] => 20 [1] => 222 [2] => 2 [3] => 22 ) )
Чтобы изменить направление сортировки вторым аргументом функции указывается SORT_ASC или SORT_DESC .
array_multisort($array, SORT_DESC); print_r($array);
Сортировка многомерного массива по значению одного ключа
Есть несколько вариантов, первый – uasort() , сортирует массив, используя пользовательскую функцию для сравнения элементов и сохранением ключей.
В примере сортировка идет по ключу « count ».
$array = array( array( 'sku' => '645908-463', 'count' => '1' ), array( 'sku' => '64590644', 'count' => '20' ), array( 'sku' => '7543', 'count' => '2' ) ); // По возрастанию: function cmp_function($a, $b) < return ($a['count'] >$b['count']); > uasort($array, 'cmp_function'); print_r($array); // По убыванию: function cmp_function_desc($a, $b) < return ($a['count'] < $b['count']); >uasort($array, 'cmp_function_desc'); print_r($array);
Результат:
Array ( [0] => Array( [sku] => 645908-463 [count] => 1 ) [2] => Array( [sku] => 7543 [count] => 2 ) [1] => Array( [sku] => 64590644 [count] => 20 ) ) Array ( [1] => Array( [sku] => 64590644 [count] => 20 ) [2] => Array( [sku] => 7543 [count] => 2 ) [0] => Array( [sku] => 645908-463 [count] => 1 ) )
Второй вариант на основе функции array_multisort() :
function array_multisort_value() < $args = func_get_args(); $data = array_shift($args); foreach ($args as $n =>$field) < if (is_string($field)) < $tmp = array(); foreach ($data as $key =>$row) < $tmp[$key] = $row[$field]; >$args[$n] = $tmp; > > $args[] = &$data; call_user_func_array('array_multisort', $args); return array_pop($args); > $array = array( array( 'sku' => '645908-463', 'count' => '1' ), array( 'sku' => '64590644', 'count' => '20' ), array( 'sku' => '7543', 'count' => '2' ) ); $array = array_multisort_value($array, 'count', SORT_DESC); print_r($array);
Перемешать массив
Функция shuffle() перемешивает массив в случайном порядке, не сохроняя ключи.
$array = array( 1 => 'яблоко', 2 => 'апельсин', 3 => 'виноград' ); shuffle($array); print_r($array); shuffle($array); print_r($array);
Результат:
Array ( [0] => виноград [1] => яблоко [2] => апельсин ) Array ( [0] => виноград [1] => апельсин [2] => яблоко )
Php сортировка строк алфавиту
Для того, чтобы сортировать массив по алфавиту нам понадобится:
Мы используем «ВСЕГДА» на сайте только живые коды и примеры, поэтому, мы сможем вывести прямо здесь наш массив, который будем сортировать по алфавиту в латинице, с помощью print_r:
Array(
[0] => Tom [1] => Bob [2] => Sam [3] => Alice)
Как видим. наш массив в латинице не отсортирован по алфавиту.
Теперь применим к данному массиву функцию «sort«
Результат сортировки массива по алфавиту в латинице, в php
Как видим массив — замечательно отсортировался по алфавиту!
Array(
[0] => Alice [1] => Bob [2] => Sam [3] => Tom)
Сортировать массив в php — латиница, в обратную сторону.
Для того, чтобы отсортировать массив в латинице в обратную сторону, нам понадобится:
Возьмем тот же массив, который бы у нас в предыдущем пункте:
И применим родственную функцию предыдущей функции — rsort
И выведем опять, прямо здесь, отсортированный массив в обратную сторону в латинице:
Результат сортировки массива по алфавиту в обратную сторону, в php
Наш массив прекрасно отсортировался в алфавитном порядке, в обратную сторону.
Array(
[0] => Tom [1] => Sam [2] => Bob [3] => Alice)
Сортировать смешанный массив в php — латинице.
Что означает в данном контексте слово смешанный массив?
Смешанный массив — создадим массив, где будут и строчные и прописные буквы в латинице!
Почему бы не попробовать отсортировать такой массив в алфавитном порядке?
Для такой сортировки массива по алфавиту, нам понадобится массив, в котором будут и прописные и строчные буквы.
$array_for_sort= [«Tom», «Bob», «sam», «alice»];
Вы можете потренироваться любыми функция отсортировать такой или подобный массив, я этим не буду заниматься! Мы сразу перейдем к сортировке выше приведенного массива. Нам понадобится опять функция «sort», но с дополнительными флагами — «SORT_NATURAL | SORT_FLAG_CASE»
И выведем данную строку здесь:
Результат сортировки массива с прописными и строчными буквами латинице:
Мы видим результат сортировки массива в php? в латинице с строчными и прописными буквами!
Array(
[0] => alice [1] => Bob [2] => sam [3] => Tom)
Сортируем массив в php — кириллица.
Следующим пунктом отсортируем массив в php в кириллице!
Для того, чтобы отсортировать массив по алфавиту, нам понадобится массив в кириллице.
Создадим простой(одномерный) массив:
Применим к данному массиву функцию «sort»:
Уже несколько надоевшая функция print_r, с помощью которой выведем отсортированный массив:
Результат сортировки массива в кириллице:
Как видим. наш массив в кириллице, в php, замечательно отсортировался по алфавиту!
Array(
[0] => анкор [1] => банка [2] => вид [3] => голос [4] => фифа [5] => якорь)
Сортируем массив в php — кириллица, в обратную сторону.
Далее. отсортируем массив в кириллице в обратную сторону:
Для того, чтобы отсортировать массив по алфавиту, в обратную сторону, нам опять понадобится массив в кириллице.
Возьмем тот же массив, что был выше пунктом:
Применим к массиву функцию «rsort»:
Опять используем print_r, с помощью которой выведем отсортированный массив:
Результат сортировки массива в кириллице, в обратную сторону:
Как видим. наш массив в кириллице, в php, замечательно отсортировался по алфавиту, в обратную сторону!
Array(
[0] => якорь [1] => фифа [2] => голос [3] => вид [4] => банка [5] => анкор)
Сортировать смешанный массив в php — кириллице.
Теперь. относительно смешанного массива в php в кириллице, где встречаются и прописные и строчные буквы!
Возможно есть способ, который существует для сортировки такого массива по алфавиту, но я его не нашел! смайлы
Поэтому, приведу пример, как я бы решил эту задачку!
Поскольку — у нас есть и строчные и прописные буквы — нам следует привести буквы к единому массиву, например к строчным.
Погнали!
Чтобы отсортировать массив с прописными и строчными буквами, нам потребуется массив:
После этого. рекурсивно проходим по значениям массива и применим собственную функцию strtolower
Далее. применим уже не раз использованную функцию «sort»:
Результат сортировки смешанного массива в кириллице:
Как видим. наш массив в кириллице, в php, замечательно отсортировался по алфавиту!
Array(
[0] => анкор [1] => банка [2] => вид [3] => голос [4] => фифа [5] => якорь)
Php сортировка строк алфавиту
Рассмотрим некоторые встроенные наиболее распространенные функции, которые мы можем применять при работе с массивами.
Функция is_array
Функция is_array() проверяет, является ли переменная массивом, и если является, то возвращает true , иначе возвращает false . Например:
$users = ["Tom", "Bob", "Sam"]; $isArray = is_array($users); echo ($isArray==true)?"это массив":"это не массив";
Функции count/sizeof
Функция count() и sizeof() получают количество элементов массива:
$users = ["Tom", "Bob", "Sam"]; $number = count($users); // то же самое, что // $number = sizeof($users); echo "В массиве users $number элемента/ов";
Функции shuffle
Функция shuffle перемешивает элементы массивы случайным образом:
$users = ["Tom", "Bob", "Sam", "Alice"]; shuffle($users); print_r($users); // один из возможных вариантов //Array ( [0] => Bob [1] => Tom [2] => Alice [3] => Sam )
Функции compact
Функция compact позволяет создать из набора переменных ассоциативный массив, где ключами будут имена переменных:
Apple II [producer] => Apple [year] => 1978 ) ?>
Функция compact получает в скобках набор переменных. Каждая переменная указывается в кавычка без знака $. Результатом функции является новый массив.
Сортировка массивов
В PHP имеются два типа сортировки: сортировка строк по алфавиту и сортировка чисел по возрастанию/убыванию. Если сортируемые значения представляют строки, то они сортируются по алфавиту, если числа — то они сортируются в порядке возрастания чисел. PHP по умолчанию самостоятельно выбирает тип сортировки.
Для сортировки по возрастанию используется функция asort :
$users = ["Tom", "Bob", "Sam", "Alice"]; asort($users); print_r($users); // вывод отсортированного массива // Array ( [3] => Alice [1] => Bob [2] => Sam [0] => Tom )
В данном случае значения массива представляют строки, поэтому PHP выберет сортировку по алфавиту. Однако с помощью дополнительного параметра мы можем явно указать интерпретатору PHP тип сортировки. Данный параметр может принимать три значения:
- SORT_REGULAR : автоматический выбор сортировки
- SORT_NUMERIC : числовая сортировка
- SORT_STRING : сортировка по алфавиту
Укажем явно тип сортировки:
Чтобы отсортировать массив в обратном порядке, применяется функция arsort :
Сортировка по ключам
Функция asort производит сортировку по значениям элементов, но также существует и еще и сортировка по ключам. Она представлена функцией ksort :
$states = ["Spain" => "Madrid", "France" => "Paris", "Germany" => "Berlin", ]; asort($states); print_r($states); // массив после asort - сортировка по значениям элементов // Array ( [Germany] => Berlin [Spain] => Madrid [France] => Paris ) ksort($states); print_r($states); // массив после ksort - сортировка по ключам элементов // Array ( [France] => Paris [Germany] => Berlin [Spain] => Madrid )
Сортировка по ключам в обратном порядке выполняется функцией krsort() :
Естественная сортировка
Хотя выше описанные функции сортировки прекрасно выполняют свою работу, но их возможностей все-таки недостаточно. Например, отсортируем по возрастанию следующий массив:
Windows 10 [0] => Windows 7 [1] => Windows 8 ) ?>
Так как значения представляют строки, то PHP сортирует по алфавиту. Однако подобная сортировка не учитывает числа и регистр. Поэтому значение «Windows 10» будет идти в самом начале, а не в конце, как должно было быть. И для решения этой проблемы в PHP есть функция natsort() , которая выполняет естественную сортировку:
Windows 7 [1] => Windows 8 [2] => Windows 10) ?>
Если нам надо еще при этом, чтобы сортировка не учитывала регистр, то мы можем применить функцию natcasesort() :