PHP. Сортировка массива по длине его значений?

Я сделал анаграмму, и у меня есть ряд положительных совпадений. Проблема в том, что все они в другом порядке, я хочу иметь возможность сортировать массив, чтобы сначала отображались самые длинные значения массива.

У кого-нибудь есть идеи о том, как это сделать?

Использовать 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