使用Laravel 5中的点表示法从指定的键列表返回数组的值

时间:2018-03-20 16:23:43

标签: php laravel laravel-5 laravel-5.6

我使用的是Laravel 5.6。我想要一个函数,它使用点符号从给定数组中仅返回指定的键/值对。

例如:

$array = [
    'name' => [
        'first' => 'John', 
        'last' => 'Smith'
    ], 
    'price' => 100,
    'orders' => 10
];


$slice = someFunc($array, ['name.first', 'price']);

应该返回:

[
    'name' => [
        'first' => 'John'
    ],
    'price' => 100,
]

最接近Laravel的功能就是array_only功能:

https://laravel.com/docs/5.6/helpers#method-array-only

但是,它不支持点符号(与其他一些Laravel函数不同)。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

你可以使用两个选项。第一种是使用array_dot将多维数组展平为一维点标记数组:

$flattened = array_dot([
    'name' => [
        'first' => 'John', 
        'last' => 'Smith'
    ], 
    'price' => 100,
    'orders' => 10
]);

这将产生以下结果:

[
    'name.first' => 'John',
    'name.last' => 'Smith',
    'price' => 100,
    'orders' => 10,
]

从那里你可以使用array_except($flattened, 'orders')获得除订单之外的所有内容。当然,生成的数组仍然是点符号,这可能不适合你。

我能想到的第二个选项是将多个调用合并到array_get,因为它支持点符号。