【发布时间】:2010-10-24 16:56:06
【问题描述】:
我做了一个字谜机器,我有一系列正匹配。问题是它们的顺序不同,我希望能够对数组进行排序,以便首先出现最长的数组值。
有人对如何做到这一点有任何想法吗?
【问题讨论】:
我做了一个字谜机器,我有一系列正匹配。问题是它们的顺序不同,我希望能够对数组进行排序,以便首先出现最长的数组值。
有人对如何做到这一点有任何想法吗?
【问题讨论】:
function sortByLength($a,$b){
if($a == $b) return 0;
return (strlen($a) > strlen($b) ? -1 : 1);
}
usort($array,'sortByLength');
【讨论】:
使用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
【讨论】:
这是我过去做过的一种方式。
// 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
【讨论】:
如果你想用 PHP 5.3 的方式来做,你可能想创建这样的东西:
usort($array, function($a, $b) {
return strlen($b) - strlen($a);
});
这样您就不会污染您的全局命名空间。
但仅当您需要在源代码中的一个位置使用它以保持干燥时才这样做。
【讨论】:
创建一个由 oyur 数组元素组成的 strlen 数组,并将 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;
}
【讨论】:
PHP7 即将到来。在 PHP7 中,您可以使用 Spaceship Operator。
usort($array, function($a, $b) {
return strlen($b) <=> strlen($a);
});
希望这对您将来有所帮助。
【讨论】:
array_multisort(array_map('count', $arr), SORT_DESC, $arr);
【讨论】:
这是一种使用 spaceship 运算符的方法(需要 PHP 7.0):
$arr = ['apple','pear','oranges','banana'];
usort($arr, function ($a, $b) { return (strlen($a) <=> strlen($b)); });
print_r($arr);
【讨论】:
降序:
$array = ['aa', 'bb', 'c', 'ccc', 'a', 'ertre'];
usort($array, function($a, $b){
return strlen($a) < strlen($b);
});
var_export($array);
// Output
array (
0 => 'ertre',
1 => 'ccc',
2 => 'aa',
3 => 'bb',
4 => 'c',
5 => 'a',
)
升序:
$array = ['aa', 'bb', 'c', 'ccc', 'a', 'ertre'];
usort($array, function($a, $b){
return strlen($a) > strlen($b);
});
// Output
array (
0 => 'c',
1 => 'a',
2 => 'aa',
3 => 'bb',
4 => 'ccc',
5 => 'ertre',
)
【讨论】: