我正在寻找最简洁的方法来按字母顺序排序数组,并在PHP中使用strlen。我用strlen排序的最干净的方法是:
array_multisort(array_map('strlen', $array), $array);
我如何扩展它以按字母顺序按值排序作为主要排序?
这是一个示例数组:
array('name'=>'Firstname','name2'=>'Lastname1','name3'=>'Lastname2')
排序函数之后的顺序并不重要,重要的是它在排序时总是返回相同的顺序,而不管某些值的长度是否相同。排序后不需要数组键。
答案 0 :(得分:1)
您还可以使用usort()
:
$your_array = array( . . . );
$your_compare_function = function($elem1, $elem2) {
return strlen($elem1) > strlen($elem2) || $elem1 > $elem2;
};
usort($your_array, $your_compare_function);
如果排序顺序不正确,我道歉。我在你的帖子中不确定预期的排序是什么。只需相应地更新比较功能。
答案 1 :(得分:0)
您要么sort()
要么natsort()
(如果您要处理字符串中的多位数字)。
使用sort()
,natsort()
或strlen()
中没有任何关系会被“破坏”。
答案是:不要打扰strlen()
作为第二次比较而usort()
是过度杀伤。
代码:(Demo)
$array=['name'=>'Firstname','name2'=>'Lastname10','name3'=>'Lastname2','name4'=>'Lastname1','name4'=>'Lastname20'];
natsort($array);
var_export($array);
echo "\n---\n";
sort($array);
var_export($array);
输出:
array (
'name' => 'Firstname',
'name3' => 'Lastname2',
'name2' => 'Lastname10',
'name4' => 'Lastname20',
)
---
array (
0 => 'Firstname',
1 => 'Lastname10',
2 => 'Lastname2',
3 => 'Lastname20',
)