【问题标题】:php sort multi dimensional array by value with different keysphp按不同键的值对多维数组进行排序
【发布时间】:2019-10-16 11:14:28
【问题描述】:
Array
(
    [0] => Array
        (
            [id] => AL
            [country] => Albania
            [country_group] => 1
        )

    [1] => Array
        (
            [id] => AT
            [country] => Austria
            [country_group] => 1
        )

    [2] => Array
        (
            [id] => BE
            [country] => Belgium
            [country_group] => 1
        )

    [3] => Array
        (
            [id] => BG
            [country] => Bulgaria
            [country_group] => 1
        )

    [4] => Array
        (
            [id] => HR
            [country] => Croatia
            [country_group] => 1
        )

    [5] => Array
        (
            [id] => CY
            [country] => Cyprus
            [country_group] => 1
        )

    [6] => Array
        (
            [id] => CZ
            [country] => Czech Republic
            [country_group] => 1
        )

    [7] => Array
        (
            [id] => DK
            [country] => Denmark
            [country_group] => 1
        )

    [8] => Array
        (
            [id] => EG
            [country] => Egypt
            [country_group] => 1
        )

    [9] => Array
        (
            [id] => MF
            [country] => St. Martin
            [country_group] => 1
        )

    [10] => Array
        (
            [id] => 2
            [country_name] => Iceland
            [country_iso_code] => IS
            [country_id] => 98
        )
)

现在我想根据键国家的值按字母顺序排列数组,因此冰岛应该排在埃及之后,但冰岛的名称 country_name 有不同的键。

我试过了

usort($myArray, function($a, $b) {
    return $a['order'] - $b['order'];
});

它使用相同的键名,但如果键名不同,它会出现在底部。

会有更多像冰岛这样的国家,我想要一个像冰岛这样的关键国家名称

arrange($array);

它会根据键 country 和 country_name 按字母顺序排列数组。

【问题讨论】:

    标签: php arrays sorting search multidimensional-array


    【解决方案1】:

    所以,你的逻辑是

    如果元素有 country_name 键 - 使用它来排序,否则 - 使用 country 键

    usort($myArray, function($a, $b) {
        $aName = !empty($a['country_name']) ? $a['country_name'] : $a['country'];
        $bName = !empty($b['country_name']) ? $b['country_name'] : $b['country'];
    
    
        return strcmp($aName, $bName);
    });
    

    另一种解决方案是遍历$myArray,在需要的地方将键country_name替换为键country并照常排序。

    【讨论】:

      【解决方案2】:

      Usort 是一个不错的选择,但是当缺少 country 键时,只需使用 country_name。

      usort($countries, function ($a, $b) {
          return ($a['country'] ?? $a['country_name']) > ($b['country'] ?? $b['country_name']);
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-15
        • 1970-01-01
        • 2013-02-06
        • 1970-01-01
        • 2016-07-23
        • 1970-01-01
        相关资源
        最近更新 更多