如何按字母顺序排列数组和strlen

时间:2017-10-04 16:41:22

标签: php arrays sorting

我正在寻找最简洁的方法来按字母顺序排序数组,并在PHP中使用strlen。我用strlen排序的最干净的方法是:

array_multisort(array_map('strlen', $array), $array);

我如何扩展它以按字母顺序按值排序作为主要排序?

这是一个示例数组:

array('name'=>'Firstname','name2'=>'Lastname1','name3'=>'Lastname2')

排序函数之后的顺序并不重要,重要的是它在排序时总是返回相同的顺序,而不管某些值的长度是否相同。排序后不需要数组键。

2 个答案:

答案 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',
)