По дате Ноябрь 2nd, 2010

Сортировка массивов в PHP

В PHP есть несколько функций для сортировки массивов. Практически на все случаи жизни :)

sort - сортирует массив. После завершения работы функции элементы массива будут расположены в порядке возрастания.

arsort - сортирует массив в обратном порядке таким образом, что сохраняются отношения между ключами и значениями. Она полезна, в основном, при сортировке ассаоциативных массивов, когда важно сохранить отношение ключ => значение

asort -  сортирует массив таким образом, что сохраняются отношения между ключами и значениями. Она полезна, в основном, при сортировке ассоциативных массивов, когда важно сохранить отношение ключ => значение

ksort - cортирует массив по ключам, сохраняя отношения между ключами и значениями. Функция полезна, в основном, для работы с ассоциативными массивами

natsort - реализует алгоритм сортировки, при котором порядок буквенно-цифровых строк будет привычным для человека. Такой алгоритм называется “natural ordering”. (img2<img10)

natcasesort - регистронезависимый natsort

rsort - сортирует массив в обратном порядке (от большего к меньшему)

usort - сортирует массив по значениям используя пользовательскую функцию для сравнения элементов (для любителей эксклюзива)

uksort - сортирует массив по ключам, используя для сравнения его ключей функцию, определённую пользователем. Если массив должен быть отсортирован по какому-либо необычному признаку, вы должны использовать эту функцию.

array_multisort - может быть использована для сортировки сразу нескольких массивов или одного многомерного массива в соответствии с одной или несколькими размерностями. Эта функция сохраняет соответствие между ключами и соответствующими им значениями.
Однако, для случая, когда нужно отсортировать многомерный массив “по строкам” можно использовать следующую функцию:


function array_orderby()
{
$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);
}
?>
The sorted array is now in the return value of the function instead of being passed by reference.
$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);
// Pass the array, followed by the column names and sort flags
$sorted = array_orderby($data, 'volume', SORT_DESC, 'edition', SORT_ASC);
?>

Для сортировки по “рядам” такой метод как раз сгодится.

Опубликовано Ноябрь 2, 2010 | автор: levik  |  Нет комментариев »