PHP的:按数值的长度sorting数组?

我制作了一台闹钟机器,并有一系列正面匹配。 麻烦的是他们都是在不同的顺序,我想能够sorting数组,所以最长的数组值首先出现。

任何人有任何想法如何做到这一点?

使用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的方式,您可能需要创build如下所示的内容:

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

这样你就不会污染你的全局名字空间。

但是,只有在源代码中的一个地方需要它才能保持干燥的情况下,才能做到这一点。

PHP7即将到来。 在PHP7中,您可以使用Spaceship Operator 。

 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'); 

创build一个oyur数组元素的strlen ,并用你的数组multisort它。

 foreach($Yourarray as $c=>$key) { $key['maxlen'] = strlen($key); $sort_numcie[] = $key['maxlen']; } array_multisort($sort_numcie, $Yourarray); 

这将肯定工作。 我确定!

除了接受的答案之外,按照升序或降序对数组按长度sorting

 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