【问题标题】:How to Sort array alphabetical and by strlen如何按字母顺序和strlen对数组进行排序
【发布时间】:2017-10-04 16:41:21
【问题描述】:

我正在寻找在 PHP 中按字母顺序和 strlen 对数组进行排序的最简洁方法。我想出的按 strlen 排序的最干净的方法是:

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

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

这是一个示例数组:

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

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

【问题讨论】:

  • 好问题!但是您能否提供一个示例数组,以及排序后的输出示例?
  • 在看到您的编辑之前我已经回答了。您需要保留数组键吗?如果是这样,那么您是否需要保持键与它们的原始值相关联并重新排列它们的位置,还是没关系?
  • 不,排序后不需要数组键。谢谢

标签: php arrays sorting


【解决方案1】:

你也可以使用usort():

$your_array = array( . . . );
$your_compare_function = function($elem1, $elem2) {
    return strlen($elem1) > strlen($elem2) || $elem1 > $elem2;
};

usort($your_array, $your_compare_function);

如果排序顺序不正确,我深表歉意。我从你的帖子中不确定预期的顺序是什么。只需相应地更新比较函数即可。

【讨论】:

    【解决方案2】:

    您需要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',
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      • 2020-10-20
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      相关资源
      最近更新 更多