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