我使用的是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函数不同)。
我怎样才能做到这一点?
答案 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
,因为它支持点符号。