PHP Conference Nagoya 2025

Впорядкування масивів

PHP має декілька функцій, що впорядковують масиви, і цей документ існує, щоб допомогти це все розібрати.

Основні відмінності:

  • Деякі функції впорядковують ключі масивів, тоді як інші — значення: $array['ключ'] = 'значення';
  • Деякі зберігають зв'язок між ключами та значеннями, а інші ні, наприклад, замінюють ключі на числові (0,1,2 ...)
  • Порядок: алфавітний, за зростаннями (від меншого до більшого), за спаданням (від більшого до меншого), природній, випадковий або визначений користувачем
  • Примітка: Усі ці функції впливають конкретно на заданий масив, а не повертають впорядкований новий
  • Якщо будь-яка з цих функцій оцінює два члени як рівні, тоді вони зберігають свій початковий порядок. До PHP 8.0.0, їхній порядок був невизначеним (сортування не було стабільним)

Атрибути функцій впорядкування
Назва функції Що впорядковує Підтримка прив'язки ключів Порядок Пов'язані функції
array_multisort() значення типу string — так, int — ні перший масив або опції впорядкування array_walk()
asort() значення так за зростанням arsort()
arsort() значення так за спаданням asort()
krsort() ключ так за спаданням ksort()
ksort() ключ так за зростання krsort()
natcasesort() значення так природній, без урахування регістру natsort()
natsort() значення так природній natcasesort()
rsort() значення ні за спаданням sort()
shuffle() значення ні випадково array_rand()
sort() значення ні за зростанням rsort()
uasort() значення так визначає користувач uksort()
uksort() ключ так визначає користувач uasort()
usort() значення ні визначає користувач uasort()

add a note

User Contributed Notes 2 notes

up
142
"Matthew Rice"
11 years ago
While this may seem obvious, user-defined array sorting functions ( uksort(), uasort(), usort() ) will *not* be called if the array does not have *at least two values in it*.

The following code:

<?php

function usortTest($a, $b) {
var_dump($a);
var_dump($b);
return -
1;
}

$test = array('val1');
usort($test, "usortTest");

$test2 = array('val2', 'val3');
usort($test2, "usortTest");

?>

Will output:

string(4) "val3"
string(4) "val2"

The first array doesn't get sent to the function.

Please, under no circumstance, place any logic that modifies values, or applies non-sorting business logic in these functions as they will not always be executed.
up
24
oculiz at gmail dot com
13 years ago
Another way to do a case case-insensitive sort by key would simply be:

<?php
uksort
($array, 'strcasecmp');
?>

Since strcasecmp is already predefined in php it saves you the trouble to actually write the comparison function yourself.
To Top