Есть массив: Код (Text): array( 'one' => 'hello', 'tw990o' => 'good', 'tr' => 'so', 'grgrgerg' => 'hey', '5' => 'pereter' ); Нужно отсортировать по ключу, при этом в начале - самый длинный ключ, в конце - самый короткий. Код (Text): array( 'grgrgerg' => 'hey', 'tw990o' => 'good', 'one' => 'hello', 'tr' => 'so', '5' => 'pereter' ); Рассматриваю usort. Пока вот что есть: Код (Text): usort( $arr, function( $a, $b ) { return ( ( strlen( $b ) < strlen( $a ) ) ? -1 : 1 ); } ); Выводит: Array ( [0] => pereter [1] => hello [2] => good [3] => hey [4] => so )
https://php.ru/manual/array.sorting.html Выбирайте функции сортировки по ключу для своих нужд. И небольшая вырезка из мануала: Флаги сортировки: SORT_REGULAR - обычное сравнение элементов (без изменения типов) SORT_NUMERIC - числовое сравнение элементов SORT_STRING - строковое сравнение элементов SORT_LOCALE_STRING - сравнивает элементы как строки с учетом текущей локали. Используется локаль, которую можно изменять с помощью функции setlocale() SORT_NATURAL - сравнение элементов как строк, используя естественное упорядочение, как в функции natsort() SORT_FLAG_CASE - может быть объединен (побитовое ИЛИ) с SORT_STRING или SORT_NATURAL для сортировки строк без учета регистра.
@Yankovitz В общем, не удержался и написал за вас) PHP: $array = array( 'one_23423' => 'helfsdf53453453453___lo', 'once' => 'hefvcvbsdfllo', 'one1' => 'hello223423', 'one' => 'hello', 'tw990o' => 'good', 'tr3fsdfsv' => '987874324o','try3' => 'sTERFgdo', 'tr' => 'so', 'trZ' => 'soSo', 'grgrgerg' => 'hey', '5' => 'pereter' ); uksort ( $array , function($a, $b) { if (strlen($a) > strlen($b)) { return 1; } elseif (strlen($a) < strlen($b)) { return -1; } else { if ( (string) $a > (string) $b ) { return 1; } elseif ( (string) $a < (string) $b ) { return -1; } else { return 0; } } }); var_dump($array); Только в обратном порядке выводит. Поменяйте порядок уже сами.