Php сортировка
Здравствуйте интересный вопрос. Когда-то сталкивался с такой задачей тоже… Вот код который вам поможет:
/* * Сортировка массива по двум параметрам с помощью usort() */ function _usort_object_by_time_ms($a, $b){ // поля по которым сортировать $array = array( 'laps'=>'desc', 'time_ms'=>'asc' ); $res = 0; foreach( $array as $k=>$v ){ if( $a->$k == $b->$k ) continue; $res = ( $a->$k < $b->$k ) ? -1 : 1; if( $v=='desc' ) $res= -$res; break; } return $res; }
Здесь в $array
нужно указать ваши поля по порядку, какое первое и второе. В значениях asc и desc — это порядок сортировки…
Функция для сортировки массива с объектами
Содержание
- 0.1 Функция для сортировки массива с объектами
- 0.2 Еще одни пример сортировки по нескольким полям
- 0.3 Сортировка многомерного массива по значению одного ключа
- 1 Сортировка пузырьком на PHP
- 2 Сортировка вставками на PHP
- 3 Сортировка слиянием на PHP
- 4 Быстрая сортировка на PHP
- 5 Сортировка выбором на PHP
- 6 A – Сортировка по оценке (параметр grade) (числовая сортировка)
- 7 Сортирование индексированных массивов: sort() and rsort()
- 8 Сортировка ассоциативных массивов: asort() and arsort()
- 9 Сортировка ассоциативных массивов по ключу: ksort() и krsort()
- 10 Сортировка сложных и многомерных массивов с array_multisort()
Функция на основе первого примера, с которой удобно работать.
Передаете в $array
массив объектов (можно массив массивов), указываете в $args
параметры сортировки и получаете отсортированный массив объектов.
## Сортировка объектов/массивов находящихся в массиве, по указанным полям. function sort_nested_arrays( $array, $args = array('votes' => 'desc') ){ usort( $array, function( $a, $b ) use ( $args ){ $res = 0; $a = (object) $a; $b = (object) $b; foreach( $args as $k => $v ){ if( $a->$k == $b->$k ) continue; $res = ( $a->$k < $b->$k ) ? -1 : 1; if( $v=='desc' ) $res= -$res; break; } return $res; } ); return $array; }
Пример:
$arr = array( array( 'laps' => 25, 'time_ms' => 3143413, ), array( 'laps' => 24, 'time_ms' => 3146280, ), (object) array( 'laps' => 23, 'time_ms' => 3149972, ), (object) array( 'laps' => 25, 'time_ms' => 3162714, ), ); $arr = sort_nested_arrays( $arr, array('laps' => 'desc') ); print_r( $arr ); /* Получим: Array ( [0] => Array ( [laps] => 25 [time_ms] => 3143413 ) [1] => stdClass Object ( [laps] => 25 [time_ms] => 3162714 ) [2] => Array ( [laps] => 24 [time_ms] => 3146280 ) [3] => stdClass Object ( [laps] => 23 [time_ms] => 3149972 ) ) */
Еще одни пример сортировки по нескольким полям
Допустим у нас есть массив:
Array ( [0] => 10В [1] => 5Б [2] => 9А [3] => 11А [4] => 10А [5] => 5А [6] => 10Г [7] => 9Б )
Нам нужно отсортировать его, сначала по числу в строке, а затем по букве. Делаем так:
// сортируем по порядку: числа, потом буквы usort( $val, function($a,$b){ $res = 0; // сравниваем числа $inta=intval($a); $intb=intval($b); if( $inta != $intb ){ return ( $inta > $intb ) ? 1 : -1; } // сравниваем буквы $var1 = preg_replace('~[0-9]+~', '', $a); $var2 = preg_replace('~[0-9]+~', '', $b); $compare = strcmp( $var1, $var2 ); // А считается меньше Б if( $compare !== 0 ){ return ( $compare > 0 ) ? 1 : -1; } return $res; } );
Получим:
Array ( [0] => 5А [1] => 5Б [2] => 9А [3] => 9Б [4] => 10А [5] => 10В [6] => 10Г [7] => 11А )
wp-kama.ru
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);
snipp.ru
Очень часто нужно отсортировать массив по индексу его элементов, по алфавиту его элементов, по возрастанию, по убыванию и т. д. В PHP для этого существует достойное количество функций, и в этом уроке мы поговорим именно о них.
Первая функция — sort
, которая сортирует массив по возрастанию значений его элементов, при этом изменяя индекс после сортировки:
<?php $arr[0] = "PHP"; $arr[1] = "HTML"; $arr[2] = "CSS"; sort($arr); print_r($arr); ?>
Отображение в браузере:
Array ( [0] => CSS [1] => HTML [2] => PHP )
Вторая функция — rsort
, которая сортирует массив по убыванию значений его элементов, при этом не изменяя индекс после сортировки:
<?php $arr[0] = "PHP"; $arr[1] = "HTML"; $arr[2] = "CSS"; rsort($arr); print_r($arr); ?>
Отображение в браузере:
Array ( [0] => PHP [1] => HTML [2] => CSS )
Третья функция — ksort
, которая сортирует массив по ключам, сохраняя отношения между ключами и значениями:
<?php $arr[0] = "PHP"; $arr[1] = "HTML"; $arr[2] = "CSS"; ksort($arr); print_r($arr); ?>
Отображение в браузере:
Array ( [0] => PHP [1] => HTML [2] => CSS )
Следующая функция — krsort
, которая сортирует массив по убыванию индексов его элементов:
<?php $arr[0] = "PHP"; $arr[1] = "HTML"; $arr[2] = "CSS"; krsort($arr); print_r($arr); ?>
Отображение в браузере:
Array ( [2] => CSS [1] => HTML [0] => PHP )
Это основные, но не все функции для сортировки массивов, больше функций смотрите
на странице — Функции для работы с массивами в PHP
php720.com
Сортировка пузырьком на PHP
Wiki: Сортировка пузырьком
//Сортировка пузырьком function bubbleSort(array $arr) { $count = count($arr); if ($count <= 1) { return $arr; } for ($i = 0; $i < $count; $i++) { for ($j = $count - 1; $j > $i; $j--) { if ($arr[$j] < $arr[$j - 1]) { $tmp = $arr[$j]; $arr[$j] = $arr[$j - 1]; $arr[$j - 1] = $tmp; } } } return $arr; }
Сортировка вставками на PHP
Wiki: Сортировка вставками
//Сортировка вставками function insertSort(array $arr) { $count = count($arr); if ($count <= 1) { return $arr; } for ($i = 1; $i < $count; $i++) { $cur_val = $arr[$i]; $j = $i - 1; while (isset($arr[$j]) && $arr[$j] > $cur_val) { $arr[$j + 1] = $arr[$j]; $arr[$j] = $cur_val; $j--; } } return $arr; }
Сортировка слиянием на PHP
Wiki: Сортировка слиянием
//Сортировка слиянием function mergeSort(array $arr) { $count = count($arr); if ($count <= 1) { return $arr; } $left = array_slice($arr, 0, (int)($count/2)); $right = array_slice($arr, (int)($count/2)); $left = mergeSort($left); $right = mergeSort($right); return merge($left, $right); } function merge(array $left, array $right) { $ret = array(); while (count($left) > 0 && count($right) > 0) { if ($left[0] < $right[0]) { array_push($ret, array_shift($left)); } else { array_push($ret, array_shift($right)); } } array_splice($ret, count($ret), 0, $left); array_splice($ret, count($ret), 0, $right); return $ret; }
Быстрая сортировка на PHP
Wiki: Быстрая сортировка
//Быстрая сортировка function quickSort(array $arr) { $count= count($arr); if ($count <= 1) { return $arr; } $first_val = $arr[0]; $left_arr = array(); $right_arr = array(); for ($i = 1; $i < $count; $i++) { if ($arr[$i] <= $first_val) { $left_arr[] = $arr[$i]; } else { $right_arr[] = $arr[$i]; } } $left_arr = quickSort($left_arr); $right_arr = quickSort($right_arr); return array_merge($left_arr, array($first_val), $right_arr); }
Сортировка выбором на PHP
Wiki: Сортировка выбором
//Сортировка выбором function selectSort(array $arr) { $count= count($arr); if ($count <= 1){ return $arr; } for ($i = 0; $i < $count; $i++){ $k = $i; for($j = $i + 1; $j < $count; $j++){ if ($arr[$k] > $arr[$j]){ $k = $j; } if ($k != $i){ $tmp = $arr[$i]; $arr[$i] = $arr[$k]; $arr[$k] = $tmp; } } } return $arr; }
Использование примеров сортировок на PHP
echo "<pre>"; echo "<br>", "Bubble Sorting - 1, 99, 3, 77, 5, 998, 7, 45, 32", "<br>"; $arr = array(1, 99, 3, 77, 5, 998, 7, 45, 32); $reuslt = bubbleSort($arr); print_r($reuslt); echo "<br>", "Insert Sorting - 1, 88, 5, 77, 99, 98, 97, 55, 56, 52, 59, 37", "<br>"; $arr = array(1, 88, 5, 77, 99, 98, 97, 55, 56, 52, 59, 37); $reuslt = insertSort($arr); print_r($reuslt); echo "<br>", "Merge Sorting - 6, 5, 3, 1, 8, 7, 9, 2, 4", "<br>"; $arr = array(6, 5, 3, 1, 8, 7, 9, 2, 4); $reuslt = mergeSort($arr); print_r($reuslt); echo "<br>", "Quick Sorting - 1, 99, 87, 2, 5, 9, 1999, 899, 777", "<br>"; $arr = array(1, 99, 87, 2, 5, 9, 1999, 899, 777); $reuslt = quickSort($arr); print_r($reuslt); echo "<br>", "Select Sorting - 11, 3, 51, 7, 99, 33, 55, 9", "<br>"; $arr = array(11, 3, 51, 7, 99, 33, 55, 9); $reuslt = selectSort($arr); print_r($reuslt);
php-zametki.ru
A – Сортировка по оценке (параметр grade) (числовая сортировка)
Определим функцию для сортировки массива по оценке (параметр grade):
Затем возьмем пользовательскую функцию и осуществим перебор двумерного массива PHP по первому ключу. Выглядит это примерно так:
Пример:
PHP будет отправлять внутренние массивы к этой функции для дальнейшей сортировки. Если вам интересно, как все это происходит в деталях, то выведите на экран результаты сравнения значений внутри функции. А саму функцию после PHP создания двумерного массива измените следующим образом:
Выводя на экран значения $x[‘оценка’] и $y [‘оценка’], можно увидеть, как вызывается функция сортировки, определенная пользователем.
Можно сократить функцию grade_sort следующим образом:
Результаты сортировки двумерного массива PHP по оценке отображены на картинке ниже:
Примечание: Функция usort () сортирует по значениям, но не сохраняет ключи (для внешнего массива). Если ключи нужны, то лучше использовать функцию uasort ().
B – Сортировка по имени (в алфавитном порядке)
Чтобы отсортировать массив $students по первому ключу, необходимо сравнить две строки. Поэтому в примере с сортировкой в алфавитном порядке воспользуемся функция strcasecmp() (не чувствительна к регистру) и strcmp() (чувствительна к регистру). Получившийся двумерный массив PHP будет иметь следующий вид:
Пример:
На скриншоте, приведенном ниже, показан результат сортировки по имени:
Перевод статьи «Sorting multi-dimensional array in PHP» был подготовлен дружной командой проекта Сайтостроение от А до Я.
www.internet-technologies.ru
Сортирование индексированных массивов: sort() and rsort()
Функция sort() сортирует значения в индексированном массиве в возрастающем порядке. Это означает, что A идёт перед Z, 0 -перед 9. Заглавные буквы перед строчными, буквы перед цифрами. Например:
$myArray = array( 1, 2, 'a', 'b', 'A', 'B' ); sort( $myArray ); // Отображает "A B a b 1 2" foreach ( $myArray as $val ) echo "$val ";
rsort() — это sort() наоборот:
$myArray = array( 1, 2, 'a', 'b', 'A', 'B' ); rsort( $myArray ); // Отображает "2 1 b a B A" foreach ( $myArray as $val ) echo "$val ";
Все sorting-функции возвращают true при успехе, и false при обломе)
Сортировка ассоциативных массивов: asort() and arsort()
sort() и rsort() очень хороши для индексированных массивов, где не нужно волноваться о связи ключа и значения. Могут получится неожиданности) Например:
$movie = array( "title" => "Rear Window", "director" => "Alfred Hitchcock", "year" => 1954, "minutes" => 112 ); sort( $movie ); // Отобразит "Array ( [0] => Alfred Hitchcock [1] => Rear Window [2] => 112 [3] => 1954 )" print_r( $movie );
Видно, что произошла путаница, и оригинальная структура «title», «director», «year» and «minutes» поменялась.
Если же вы хотите сортировать ассоциативный массив по первичному ключу, используйте функции asort() и arsort() Эти функции учитывают связь ключей и их значений
За возрастающий порядок сортировки отвечает функция asort():
$movie = array( "title" => "Rear Window", "director" => "Alfred Hitchcock", "year" => 1954, "minutes" => 112 ); asort( $movie ); // Отображает "Array ( [director] => Alfred Hitchcock [title] => Rear Window [minutes] => 112 [year] => 1954 )" print_r( $movie );
arsort() наоборот:
$movie = array( "title" => "Rear Window", "director" => "Alfred Hitchcock", "year" => 1954, "minutes" => 112 ); arsort( $movie ); // Отображает "Array ( [year] => 1954 [minutes] => 112 [title] => Rear Window [director] => Alfred Hitchcock )" print_r( $movie );
Сортировка ассоциативных массивов по ключу: ksort() и krsort()
ksort() сортирует по возрастанию значения ключа, krsort() — по убыванию. Как и asort() с arsort(), эта функция сохраняет связь между ключом значением. Пример:
$movie = array( "title" => "Rear Window", "director" => "Alfred Hitchcock", "year" => 1954, "minutes" => 112 ); // Отображает "Array ( [director] => Alfred Hitchcock [minutes] => 112 [title] => Rear Window [year] => 1954 )" ksort( $movie ); print_r( $movie ); // Отображает "Array ( [year] => 1954 [title] => Rear Window [minutes] => 112 [director] => Alfred Hitchcock )" krsort( $movie ); print_r( $movie );
Сортировка сложных и многомерных массивов с array_multisort()
Очень мощная функция array_multisort() может сортировать многомерный массив, сохраняя связь между массивами.
Вобщем, сейчас всё увидим:
Сортировка сложных массивов
Сортируем, используя array_multisort(), просто указываем те массивы, которые нужно обратотать:
$directors = array( "Stanley Kubrick", "Alfred Hitchcock", "Martin Scorsese" ); $titles = array( "Full Metal Jacket", "Rear Window", "Mean Streets" ); $years = array( 1987, 1954, 1973 ); array_multisort( $directors, $titles, $years ); print_r( $directors ); echo "<br />"; print_r( $titles ); echo "<br />"; print_r( $years ); echo "<br />";
Этот код отобразит:
Array ( [0] => Alfred Hitchcock [1] => Martin Scorsese [2] => Stanley Kubrick )
Array ( [0] => Rear Window [1] => Mean Streets [2] => Full Metal Jacket )
Array ( [0] => 1954 [1] => 1973 [2] => 1987 )
Сначала array_multisort() сортирует значения в $directors в возрастающем порядке, затем 2 остальных так же.
А что если мы хотим сортировать, например, чтобы вначале «title»? Просто положите $titles вперёд списка:
array_multisort( $titles, $directors, $years );
Сортировка по… далее…
Если первый массив содержит какое-то количество id-номеров, тогда array_multisort() сортирует
по этим значениям первый массив, затем — второй, и тд. Пример:
$directors = array( "Stanley Kubrick", "Alfred Hitchcock", "Martin Scorsese", "Stanley Kubrick" ); $titles = array( "Full Metal Jacket", "Rear Window", "Mean Streets", "A Clockwork Orange" ); $years = array( 1987, 1954, 1973, 1971 ); array_multisort( $directors, $titles, $years ); print_r( $directors ); echo "<br />"; print_r( $titles ); echo "<br />"; print_r( $years ); echo "<br />";
Этот код выдаёт следующее — заметьте, что «A Clockwork Orange» перед «Full Metal Jacket»:
Array ( [0] => Alfred Hitchcock [1] => Martin Scorsese [2] => Stanley Kubrick [3] => Stanley Kubrick )
Array ( [0] => Rear Window [1] => Mean Streets [2] => A Clockwork Orange [3] => Full Metal Jacket )
Array ( [0] => 1954 [1] => 1973 [2] => 1971 [3] => 1987 )
naikom.ru
Добрый день, сегодня мы с Вами будем изучать еще одну возможность, которая относится к PHP, а именно сортировку массивов PHP. С массивами нам приходится работать постоянно, и иногда у Вас может возникнуть вопрос о сортировке, и если Вы не знаете функций, которые придумали разработчики для сортировки массивов у Вас уйдет много времени для написания собственной функции. С точки зрения практики, данное задание отлично подойдет для тренировки, но если Вам необходимо все сделать быстро, то этот вариант Вам не подойдет. И для избегания таких ситуаций я познакомлю Вас с несколькими функциями, предоставляющими нам возможность сортировки массивов, приступим.
Первая функция называется sort, и благодаря ей мы можем сортировать массив в возрастающем порядке, однако ключи в массиве сохраняться не будут. Вторая функция rsort, и позволяет она сортировать массив в обратном порядке, т.е., в порядке убывания. Функция asort, задает сортировку, но в отличие от функции sort, она сохраняет связку ключей и значений. Замечательная функция особенно для ассоциативных массивов. Ну и наконец, последняя функция, думаю, Вы уже догадались, arsort, позволяет сортировать массив в обратном порядке, также сохраняя ключи и значения. А теперь мы рассмотрим каждую функцию на примере:
Вот мы и написали довольно понятный код, использовав при этом все сортировки. Можете посмотреть на результат, после чего я более подробно все поясню.
В самом начале мы создаем два различных массива. Выводим первый массив на экран, чтобы видеть, как он выглядит до начала сортировки, сортируем его, и выводим полученный результат на экран. Далее уже этот отсортированный массив сортируем в обратном порядке и выводим результат. Как видите, при сортировке по возрастанию она происходит по алфавиту. Такие же действия мы производили и с ассоциативным массивом, но только использовали функции, которые сохраняют связку ключ и значение. Но сортировка происходила также по алфавиту, только с сохранением ключей. Вот и все, такие четыре простые и довольно важные функции мы с Вами сегодня изучили, до скорого.
dwebbers.ru
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
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"); //передаем функцию сортировки "
array_multisort()
Сортировать несколько массивов или многомерные массивы (PHP 4, PHP 5)
Описание:
bool array_multisort ( array ar1 [, mixed arg [, mixed ... [, array ...]]] )
Функция array_multisort() может быть использована для сортировки сразу нескольких массивов или одного многомерного массива в соответствии с одной или несколькими размерностями. Эта функция сохраняет соответствие между ключами и соответствующими им значениями.
Входные массивы рассматриваются как столбцы таблицы, которую нужно отсортировать по строкам — такой подход напоминает поведение выражения SQL ORDER BY. Первый массив имеет проиоритет в процессе сортировки.
Структура аргументов этой функции немного необычна, но удобна. Первым аргументом должен быть массив. Последующие аргументы могут быть как массивами, так и значениями, определяющими порядок сортировки, приведенными в нижеследующем списке.
Значения, определяющие порядок сортировки:
SORT_ASC — сортировать в возрастающем порядке
SORT_DESC — сортировать в убывающем порядке
Флаги типа сортировки:
SORT_REGULAR — сравнивать элементы обычным образом
SORT_NUMERIC — сравнивать элементы, как если бы они были числами
SORT_STRING — сравнивать элементы, как если бы они были строками
Недопустимым является указание двух флагов сортировки одинакового типа после каждого массива. Флаги сортировки, переданные после аргумента ar1, применяются только к этому аргументу — перед тем, как функция начнет обрабатывать следующий массив, эти флаги снова принимают значения по умолчаниюt SORT_ASC и SORT_REGULAR.
Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
Сортировка нескольких массивов
$ar1 = array ("10", 100, 100, "a");
$ar2 = array (1, 3, "2", 1);
array_multisort ($ar1, $ar2);
В вышеприведенном примере, после того, как будет осуществлена сортировка, первый массив будет содержать 10, «a», 100, 100. Второй — 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);
В вышеприведенном примере, после сортировки, первый массив будет содержать 10, 100, 100, «a» (его элементы были отсортированы в возрастающем порядке так, как если бы они были строками), а второй массив будет содержать 1, 3, «2», 1 (элементы отсортированы как числа, в порядке убывания).
usort()
Отсортировать массив по значениям используя пользовательскую функцию для сравнения элементов (PHP 3 >= 3.0.3, PHP 4, PHP 5)
Описание:
bool usort ( array &array, callback cmp_function )
Эта функция сортирует элементы массива, используя для сравнения значений пользовательскую функцию. Если вам нужно отсортировать массив по необычному критерию, вы должны использовать эту функцию.
Функция, используемая для сравнения, должна возвращать целое число, меньшее, равное или большее нуля, если первый аргумент соответственно меньше, равен или больше второго.
Замечание: Если два элемента исходного массива равны, их порядок в отсортированном массиве неопределён. До PHP 4.0.6 пользовательские функции сохраняли для таких элеменов порядок в оригинальном массиве, но новый алгоритм сортировки, появившейся в версии 4.1.0 больше не использует это решение и не имеет другого эффективного.
Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
Пример использования 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: $value
";
}
?>
Результат выполнения данного примера:
0: 1
1: 2
2: 3
3: 5
4: 6
Замечание: Очевидно, что для этого тривиального случая более подходит функция sort().
Пример использования функцией usort() многомерных массивов
<?php
function cmp($a, $b)
{
return strcmp($a["fruit"], $b["fruit"]);
}
$fruits[0]["fruit"] = "lemons";
$fruits[1]["fruit"] = "apples";
$fruits[2]["fruit"] = "grapes";
usort($fruits, "cmp");
while (list($key, $value) = each($fruits)) {
echo "$fruits[$key]: " . $value["fruit"] . "
";
}
?>
При сортировке многомерного массива переменные $a и $b содержат ссылки на первые два индекса массива.
Результат выполнения данного примера:
$fruits[0]: apples
$fruits[1]: grapes
$fruits[2]: lemons
Пример использования usort() с методом класса
<?php
class TestObj {
var $name;
function TestObj($name)
{
$this->name = $name;
}
/* This is the static comparing function: */
function cmp_obj($a, $b)
{
$al = strtolower($a->name);
$bl = strtolower($b->name);
if ($al == $bl) {
return 0;
}
return ($al > $bl) ? +1 : -1;
}
}
$a[] = new TestObj("c");
$a[] = new TestObj("b");
$a[] = new TestObj("d");
usort($a, array("TestObj", "cmp_obj"));
foreach ($a as $item) {
echo $item->name . "
";
}
?>
Результат выполнения данного примера:
b
c
d
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 задает следующие флаги сортировки:
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 = appleb = bananad = lemona = 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():
<?php$arr=array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
arsort($arr);
reset($arr);
while(list ($key, $val) = each ($arr)) {
echo "$key = $vall";
}
Пример выведет:
a = oranged = lemonb = bananac = 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 = orangeb = bananac = appled = 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 = lemonc = appleb = bananaa = 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
php.info-kna.ru