📜  数组折叠 laravel - PHP (1)

📅  最后修改于: 2023-12-03 14:55:00.668000             🧑  作者: Mango

数组折叠 in Laravel - PHP

在 Laravel 中,用于将多个嵌套数组合并为单个数组的有用工具是 array_collapse。但是,如果您需要将数组折叠成特定的子项键,则您需要编写自己的逻辑代码。在本文中,我们将讨论如何将数组折叠成给定的键,让我们开始吧!

实现

我们将从一个简单的数组开始,该数组具有嵌套结构:

$array = [
    [
        'name' => 'Alice',
        'phone' => [
            'home' => '123-456-7890',
            'work' => '098-765-4321',
        ],
    ],
    [
        'name' => 'Bob',
        'phone' => [
            'home' => '555-555-5555',
            'work' => '666-666-6666',
        ],
    ],
];

现在,我们希望按以下方式将它折叠起来:

[
    'Alice_home' => '123-456-7890',
    'Alice_work' => '098-765-4321',
    'Bob_home' => '555-555-5555',
    'Bob_work' => '666-666-6666',
]

为了实现这个功能,我们需要编写自己的逻辑代码。下面是一个 collapseBy 函数的示例实现,它接受一个数组和一个键名,将该数组折叠为键的相应子项值:

function collapseBy(array $array, $key)
{
    $result = [];
    foreach ($array as $item) {
        foreach ((array) data_get($item, $key) as $value) {
            $result[$item['name'] . '_' . $key] = $value;
        }
    }
    return $result;
}

在这里,我们使用了 data_get 函数,它是 Laravel 的一个辅助函数,用于获取嵌套数组中的值。我们对处理后的结果进行质量检查,最终代码如下:

$array = [
    [
        'name' => 'Alice',
        'phone' => [
            'home' => '123-456-7890',
            'work' => '098-765-4321',
        ],
    ],
    [
        'name' => 'Bob',
        'phone' => [
            'home' => '555-555-5555',
            'work' => '666-666-6666',
        ],
    ],
];

$result = collapseBy($array, 'phone');

var_dump($result);

输出:

array(4) {
  ["Alice_home"]=>
  string(12) "123-456-7890"
  ["Alice_work"]=>
  string(12) "098-765-4321"
  ["Bob_home"]=>
  string(12) "555-555-5555"
  ["Bob_work"]=>
  string(12) "666-666-6666"
}
总结

在本文中,我们讨论了如何将嵌套的数组折叠成特定的子项键。我们甚至只需几行代码就可以使这个想法成为现实。在开发 Laravel 应用程序时,data_get 函数是非常方便和有用的,因为它可以帮助我们在多维数组中获取值。