Я думаю, вы недопонимаете дженерики. Если операция, которую вы пытаетесь выполнить, хороша только для определенных типов данных, тогда вы не выполняете что-то «generic».
Кроме того, поскольку вы хотите, чтобы функция работала только с типами данных int вам не нужна отдельная функция для каждого конкретного размера. Простое использование параметра в самом большом конкретном типе позволит программе автоматически подгонять к нему более мелкие типы данных. (т. е. передача Int16 будет автоматически конвертировать в Int64 при вызове).
Если вы выполняете разные операции на основе фактического размера int, передаваемого в функцию, тогда я думаю, вам следует серьезно пересмотреть даже попытку делать то, что вы делаете. Если вам нужно обмануть язык, вы должны думать немного больше о том, чего вы пытаетесь выполнить, а не о том, как делать то, что вы хотите.
В противном случае можно использовать параметр типа Object, а затем вам нужно будет проверить тип параметра и предпринять соответствующие действия или выбросить исключение.
Используйте 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
array_multisort(array_map('count', $arr), SORT_DESC, $arr);
Некоторые мысли:
Исторически функции определялись как процедуры, возвращающие единственное значение .
Было бы неудобно (с использованием примитивных программных конструкций) определить чистую функцию, которая возвращала несколько значений , как это.
Всегда есть исключения из правила:
Обычно просто вывести 2 квадратных корня ( просто инвертируйте значение, возвращаемое функцией).
Вот как я делал это раньше.
// Here's the sorting...
$array = array_combine($words, array_map('strlen', $words));
arsort($array);