在Laravel中可以按字母顺序排列数组吗?

zynd9foi  于 2022-12-05  发布在  其他
关注(0)|答案(4)|浏览(181)

我是Laravel的新手,我想知道我是否可以按字母顺序对以下多维数组中的国家/地区进行排序?因此,我希望各大洲中的所有国家/地区都按字母顺序排序。

"EU" => array:9 
    0 => "NL"
    1 => "BE"
    3 => "FR"
    4 => "DE"
    5 => "ES"
    6 => "IT"
    7 => "GB"
    8 => "TR"
    9 => "DK"
  ]
  "AS" => array:2
]
wnavrhmk

wnavrhmk1#

看起来你需要按值对内部数组进行排序。这里有一种方法。

$arr = [
   "EU" => [
        0 => "NL",
        1 => "BE",
        3 => "FR",
        4 => "DE",
        5 => "ES",
        6 => "IT",
        7 => "GB",
        8 => "TR",
        9 => "DK",
  ],
  "AS" => ["AB", "AA"]
];

foreach($arr as $continent => $countries) {
    asort($countries);
    $arr[$continent] = $countries;
}

var_dump($arr);
1szpjjfi

1szpjjfi2#

既然您正在寻找Laravel的答案,那么您可能会对Arr::sortRecursive()帮助器感兴趣,因为它提供了一个简短而流畅的实现。让我来演示一下您的数据代码,同时也将您的数据扩展到我的点。

use Illuminate\Support\Arr;

$array = [
  "EU" => [
    "NL", "BE", "FR", "DE", "ES", "IT", "GB", "TR", "DK",
  ],
  "AS" => [
    "JA", "IN", "CH",
  ],
  "NA" => [
    "US", "ME", "CA",
  ],
];
 
$sorted = Arr::sortRecursive($array);

/*
[
  "AS" => [
    "CH", "IN", "JA",
  ],
  "EU" => [
    "BE", "DE", "DK", "ES", "FR", "GB", "IT", "NL", "TR",
  ],
  "NA" => [
    "CA", "ME", "US",
  ],
]
*/
suzh9iv8

suzh9iv83#

您的输入数组是关联数组的关联数组(具有一致的2级深度),因此不需要递归。
使用经典循环或函数迭代器(如array_walk()),通过引用修改行并调用sort()。根据另一个答案下的注解判断,您还需要对每行调用array_unique()--以删除重复值。
代码:(Demo

foreach ($arr as &$row) {
    sort($row);
}
var_export($arr);

对于函数式编程,array_walk()可以简洁地对行进行排序。我省略了重复删除调用。(Demo

array_walk($arr, fn(&$row) => sort($row));
var_export($arr);
enxuqcxy

enxuqcxy4#

Laravel和这些东西没有任何关系。你应该使用PHP函数,这里有一个例子:

$arr = [
    0 => "NL",
    1 => "BE",
    3 => "FR",
    4 => "DE",
    5 => "ES",
    6 => "IT",
    7 => "GB",
    8 => "TR",
    9 => "DK",
];

sort($arr);

print_r($arr);

结果:

Array
(
    [0] => BE
    [1] => DE
    [2] => DK
    [3] => ES
    [4] => FR
    [5] => GB
    [6] => IT
    [7] => NL
    [8] => TR
)

相关问题