【问题标题】:How do I sort an array by string length then by value in PHP?如何在 PHP 中按字符串长度然后按值对数组进行排序?
【发布时间】:2013-05-01 00:23:56
【问题描述】:

目前,我的数组按字符串长度排序。但是,当字符串长度相等时,如何按值排序?

以我当前的代码为例:

$array = array("A","BC","AA","C","BB", "B");

function lensort($a,$b){
    return strlen($a)-strlen($b);
}

usort($array,'lensort');

print_r($array);

输出:

Array
(
    [0] => C
    [1] => A
    [2] => B
    [3] => BB
    [4] => AA
    [5] => BC
)

但是,我希望它按以下排序:

Array
(
    [0] => A
    [1] => B
    [2] => C
    [3] => AA
    [4] => BB
    [5] => BC
)

【问题讨论】:

    标签: php arrays sorting


    【解决方案1】:

    将这两个检查合并到您的比较器中:

    function lensort($a,$b){
        $la = strlen( $a); $lb = strlen( $b);
        if( $la == $lb) {
            return strcmp( $a, $b);
        }
        return $la - $lb;
    }
    

    你可以从this demo看到这个打印:

    Array
    (
        [0] => A
        [1] => B
        [2] => C
        [3] => AA
        [4] => BB
        [5] => BC
    )
    

    【讨论】:

      【解决方案2】:

      这是另一种方法:

      $f = function ($s1, $s2) {
         $n = strlen($s1) <=> strlen($s2);
         if ($n != 0) {
            return $n;
         }
         return $s1 <=> $s2;
      };
      usort($array, $f);
      

      https://php.net/language.operators.comparison

      【讨论】:

        猜你喜欢
        • 2018-11-02
        • 1970-01-01
        • 2011-03-11
        • 1970-01-01
        • 2016-04-23
        • 1970-01-01
        • 2015-01-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多