Есть массив строк;
$arr=array('longstring','string','thelongeststring');
Итак, ключи:
0=>'longstring'
1=>'string'
2=>'thelongeststring'
Я хочу отсортировать его по длине строк, от самой длинной до самой короткой, но без изменения их ключей;
$arrSorted=array(**2**=>'thelongeststring', **0**=>'longstring', **1**=>'string');
Я работаю с PHP с 2-х дней, так что я уже знаю, что может быть полезно в этом случае:
...
usort($twoDim, 'sorting');
}
function sorting($a, $b) {
return strlen($b) - strlen($a);
}
Это дает мне массив со строкой, отсортированной по длине, но с новыми ключами. Другое дело asort
который сортирует массив по алфавиту и поддерживает его ключи. Но я понятия не имею, как сделать эти две вещи одновременно …
Пожалуйста помоги!
использование uasort
:
uasort — сортирует массив с помощью пользовательской функции сравнения и поддерживает связь с индексами.
usort
не поддерживает индексные ассоциации.
Используйте это так:
function sortByLength ($a, $b) {
return strlen($b) - strlen($a);
}
$arr = ['longstring', 'string', 'thelongeststring'];
uasort($arr, 'sortByLength');
print_r($arr);
Это возвращает:
Array
(
[2] => thelongeststring
[0] => longstring
[1] => string
)