PHP uksort () для нескольких массивов - PullRequest
1 голос
/ 08 октября 2010

Я хотел бы иметь уникальную функцию sort для нескольких ассоциативных массивов.

Лучшим кандидатом среди различных функций сортировки PHP будет uksort(), (usort() будет идеальным, но при этом ключи массива изменятся на числовой индекс (!)).

Например (с использованием более простого массива)

  function sorting_by_length_desc ($a, $b) 
  {
    return strlen($GLOBALS['arr'][$b]) - strlen($GLOBALS['arr'][$a]);
  }

  $arr = ('chandler' => 'bing', 'monica' => 'lewinsky');

  uksort($arr, 'sorting_by_length_desc');

сделает $arr равным

  ('monica' => 'lewinsky', 'chandler' => 'bing');

без влияния на клавиши.

Итак, как использовать одну и ту же функцию сортировки для любого массива, uksort(), вызываемого в различных местах кода? Например, для $arr1, $arr2, ..., $arrn?
Нужно ли использовать другой глобальный var с именем массива, который будет назначен массиву, который нужно отсортировать (перед сортировкой), и использовать глобально в функции сортировки?

Должно быть что-то еще, чище, верно?

Ответы [ 2 ]

1 голос
/ 08 октября 2010

Вы можете иметь общую функцию сравнения, такую ​​как:

function sorting_by_length_desc ($a, $b) {
        return strlen($b) - strlen($a);
}

Также uksort сортирует массив по ключам. Это то, что вы ищете?

Если вы хотите отсортировать массивы по значению, поддерживающему ключ, значение ассоциации можно использовать uasort .

0 голосов
/ 04 июля 2018

Этого можно добиться с помощью функции uksort ()

  $arr = array('chandler' => 'bing', 'monica' => 'lewinsky', 'name' => 'smallest one');

  uksort($arr, function($a, $b) {
    return strlen($a) - strlen($b);
  });

  $result = $arr;

Результат (отсортирован по наименьшей длине строки ключей массива):

Array
    (
        [name] => smallest one
        [monica] => lewinsky
        [chandler] => bing
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...