Я сделал анаграмму, и у меня есть ряд положительных совпадений. Проблема в том, что все они в другом порядке, я хочу иметь возможность сортировать массив, чтобы сначала отображались самые длинные значения массива.
У кого-нибудь есть идеи о том, как это сделать?
Использовать 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
Если вы хотите сделать это с помощью PHP 5.3, вам может понадобиться создать что-то вроде этого:
usort($array, function($a, $b) { return strlen($b) - strlen($a); });
Таким образом, вы не будете загрязнять глобальное пространство имен.
Но делайте это только в том случае, если вам нужно в одном месте в исходном коде, чтобы держать вещи сухими.
PHP7 подходит. В PHP7 вы можете использовать Operator Spaceship .
usort($array, function($a, $b) { return strlen($b) <=> strlen($a); });
Надеюсь, это поможет вам в будущем.
function sortByLength($a,$b){ if($a == $b) return 0; return (strlen($a) > strlen($b) ? -1 : 1); } usort($array,'sortByLength');
Создайте массив элементов stryen из массива multisort
и multisort
с вашим массивом.
foreach($Yourarray as $c=>$key) { $key['maxlen'] = strlen($key); $sort_numcie[] = $key['maxlen']; } array_multisort($sort_numcie, $Yourarray);
Это будет определенно работать. Я уверен!
В дополнение к принятому ответу, сортировать массив по длине с возрастающим или убывающим порядком :
function strlen_compare($a,$b){ if(function_exists('mb_strlen')){ return mb_strlen($b) - mb_strlen($a); } else{ return strlen($b) - strlen($a); } } function strlen_array_sort($array,$order='dsc'){ usort($array,'strlen_compare'); if($order=='asc'){ $array=array_reverse($array); } return $array; }
поfunction strlen_compare($a,$b){ if(function_exists('mb_strlen')){ return mb_strlen($b) - mb_strlen($a); } else{ return strlen($b) - strlen($a); } } function strlen_array_sort($array,$order='dsc'){ usort($array,'strlen_compare'); if($order=='asc'){ $array=array_reverse($array); } return $array; }
Вот как я это делал в прошлом.
// Here's the sorting... $array = array_combine($words, array_map('strlen', $words)); arsort($array);
Это просто.
function LSort(a,b){return a.length-b.length;} var YourArray=[[1,2,3,4,5,6], ['a','b'], ['X','Y','Z'], ['I','Love','You'], ['good man']]; YourArray.sort(Lsort);
Результат:
['good man'] Length=1 ['a','b'] Length=3 ['X','Y','Z'] Length=3 ['I','Love','You'] Length=3 [1,2,3,4,5,6] Length=6