PHP: Отсортировать массив по длине его значений?

Я думаю, вы недопонимаете дженерики. Если операция, которую вы пытаетесь выполнить, хороша только для определенных типов данных, тогда вы не выполняете что-то «generic».

Кроме того, поскольку вы хотите, чтобы функция работала только с типами данных int вам не нужна отдельная функция для каждого конкретного размера. Простое использование параметра в самом большом конкретном типе позволит программе автоматически подгонять к нему более мелкие типы данных. (т. е. передача Int16 будет автоматически конвертировать в Int64 при вызове).

Если вы выполняете разные операции на основе фактического размера int, передаваемого в функцию, тогда я думаю, вам следует серьезно пересмотреть даже попытку делать то, что вы делаете. Если вам нужно обмануть язык, вы должны думать немного больше о том, чего вы пытаетесь выполнить, а не о том, как делать то, что вы хотите.

В противном случае можно использовать параметр типа Object, а затем вам нужно будет проверить тип параметра и предпринять соответствующие действия или выбросить исключение.

58
задан Sam152 8 May 2009 в 04:22
поделиться

4 ответа

Используйте http://us2.php.net/manual/en/function.usort.php

с этой пользовательской функцией

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

usort($array,'sort');

Используйте uasort, если вы хотите сохранить старые индексы, используйте usort, если вам все равно.

Кроме того, я считаю, что моя версия лучше, потому что usort - нестабильная сортировка.

$array = array("bbbbb", "dog", "cat", "aaa", "aaaa");
// mine
[0] => bbbbb
[1] => aaaa
[2] => aaa
[3] => cat
[4] => dog

// others
[0] => bbbbb
[1] => aaaa
[2] => dog
[3] => aaa
[4] => cat
142
ответ дан 24 November 2019 в 18:37
поделиться
array_multisort(array_map('count', $arr), SORT_DESC, $arr);
0
ответ дан 24 November 2019 в 18:37
поделиться

Некоторые мысли:

  • Исторически функции определялись как процедуры, возвращающие единственное значение .

  • Было бы неудобно (с использованием примитивных программных конструкций) определить чистую функцию, которая возвращала несколько значений , как это.

  • Всегда есть исключения из правила:

    • 0, например, имеет только одиночный root (0).
    • Вы не можете извлечь квадратный корень из отрицательного числа (если язык не поддерживает комплексные числа). Это можно рассматривать как исключение (например, «делить на 0») в языках, которые не поддерживают мнимые числа или систему комплексных чисел.
  • Обычно просто вывести 2 квадратных корня ( просто инвертируйте значение, возвращаемое функцией).

10
ответ дан 24 November 2019 в 18:37
поделиться

Вот как я делал это раньше.

// Here's the sorting...
$array = array_combine($words, array_map('strlen', $words));
arsort($array);
-1
ответ дан 24 November 2019 в 18:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: