我做了一个anagram机器,我有一系列积极的比赛.问题是它们都处于不同的顺序,我希望能够对数组进行排序,以便首先显示最长的数组值.
有人对如何做到这一点有任何想法吗?
Unk*_*own 142
使用http://us2.php.net/manual/en/function.usort.php
使用此自定义功能
function sort($a,$b){
return strlen($b)-strlen($a);
}
usort($array,'sort');
Run Code Online (Sandbox Code Playgroud)
如果你想保留旧索引,请使用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
Run Code Online (Sandbox Code Playgroud)
xlt*_*ttj 61
如果你想以PHP 5.3的方式做到这一点,你可能想要创建这样的东西:
usort($array, function($a, $b) {
return strlen($b) - strlen($a);
});
Run Code Online (Sandbox Code Playgroud)
这样您就不会污染全局命名空间.
但只有在源代码中的单个位置需要它才能保持干燥时才这样做.
小智 31
PHP7即将到来.在PHP7中,您可以使用Spaceship Operator.
usort($array, function($a, $b) {
return strlen($b) <=> strlen($a);
});
Run Code Online (Sandbox Code Playgroud)
希望这可以在将来帮助你.
zal*_*lew 10
function sortByLength($a,$b){
if($a == $b) return 0;
return (strlen($a) > strlen($b) ? -1 : 1);
}
usort($array,'sortByLength');
Run Code Online (Sandbox Code Playgroud)
小智 5
降序排列:
$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',
)
Run Code Online (Sandbox Code Playgroud)
升序:
$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',
)
Run Code Online (Sandbox Code Playgroud)