Помимо стандартных функций сортировки в PHP есть функции с использованием пользовательских вызовов для сравнения значений и ключей, их можно использовать для упорядочивания массива по количеству символов.
Для подсчета символов рекомендуется использовать mb_strlen()
вместо strlen()
т.к. в UTF8 strlen()
возвращает неправильный результат для русских букв.
uksort()
– сортирует массив по ключу, используя callback-функцию.
$array = array(
'ЗИЛ' => 1,
'ИЖ' => 0,
'Москвич' => 3,
'УАЗ' => 6,
'Alfa Romeo' => 2,
'Audi' => 5,
'BMW' => 7,
'Cadillac' => 9,
);
function sort_key_strlen($a, $b) {
return mb_strlen($a) - mb_strlen($b);
}
uksort($array, 'sort_key_strlen');
print_r($array);
Array
(
[ИЖ] => 0
[ЗИЛ] => 1
[УАЗ] => 6
[BMW] => 7
[Audi] => 5
[Москвич] => 3
[Cadillac] => 9
[Alfa Romeo] => 2
)
Поменять направление сортировки можно изменив callback-функцию:
function sort_key_strlen($a, $b) {
return mb_strlen($b) - mb_strlen($a);
}
uksort($array, 'sort_key_strlen');
print_r($array);
Или перевернуть массив функцией array_reverse()
:
По такому же принципу можно отсортировать по значениям, сохраняя ключи массива используя uasort()
.
$array = array(
1 => 'ЗИЛ',
2 => 'ИЖ',
3 => 'Москвич',
4 => 'УАЗ',
5 => 'Alfa Romeo',
6 => 'Audi',
7 => 'BMW',
8 => 'Cadillac',
);
function sort_value_strlen($a, $b) {
return mb_strlen($a) - mb_strlen($b);
}
uasort($array, 'sort_value_strlen');
print_r($array);
Array
(
[2] => ИЖ
[1] => ЗИЛ
[4] => УАЗ
[7] => BMW
[6] => Audi
[3] => Москвич
[8] => Cadillac
[5] => Alfa Romeo
)