За последние 24 часа нас посетили 22357 программистов и 995 роботов. Сейчас ищет 701 программист ...

Сортировка по ключу

Тема в разделе "PHP для новичков", создана пользователем Yankovitz, 15 мар 2019.

  1. Yankovitz

    Yankovitz Активный пользователь

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Есть массив:
    Код (Text):
    1. array( 'one' => 'hello', 'tw990o' => 'good', 'tr' => 'so', 'grgrgerg' => 'hey', '5' => 'pereter' );
    Нужно отсортировать по ключу, при этом в начале - самый длинный ключ, в конце - самый короткий.
    Код (Text):
    1. array( 'grgrgerg' => 'hey', 'tw990o' => 'good', 'one' => 'hello', 'tr' => 'so', '5' => 'pereter' );
    Рассматриваю usort. Пока вот что есть:
    Код (Text):
    1.  
    2. usort( $arr, function( $a, $b ) {
    3.    return ( ( strlen( $b ) < strlen( $a ) ) ? -1 : 1 );
    4. } );
    Выводит: Array ( [0] => pereter [1] => hello [2] => good [3] => hey [4] => so )
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    http://php.net/uasort
    --- Добавлено ---
    "a" в именах сортировочных функций означает ассоциативность.
     
  3. Ivan Vanko

    Ivan Vanko Новичок

    С нами с:
    3 мар 2019
    Сообщения:
    20
    Симпатии:
    2
    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 для сортировки строк без учета регистра.
     
  4. Ivan Vanko

    Ivan Vanko Новичок

    С нами с:
    3 мар 2019
    Сообщения:
    20
    Симпатии:
    2
    @Yankovitz

    В общем, не удержался и написал за вас)

    PHP:
    1. $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' );
    2.  
    3. uksort ( $array , function($a, $b) {
    4.  
    5.     if (strlen($a) > strlen($b)) {
    6.         return 1;
    7.     } elseif (strlen($a) < strlen($b)) {
    8.         return -1;
    9.     } else {
    10.  
    11.         if ( (string) $a > (string) $b ) {
    12.             return 1;
    13.         } elseif ( (string) $a < (string) $b ) {
    14.             return -1;
    15.         } else {
    16.             return 0;
    17.         }      
    18.     }
    19. });
    20.  
    21. var_dump($array);
    Только в обратном порядке выводит. Поменяйте порядок уже сами.