Laravel有一个帮助器,它允许你只获得你想要的密钥,如下所示:
https://laravel.com/docs/5.6/helpers#method-array-only
$array = ['name' => 'Desk', 'price' => 100, 'orders' => 10];
$slice = array_only($array, ['name', 'price']);
// ['name' => 'Desk', 'price' => 100]但是,如何才能获得同样允许使用点符号的array_only等效项呢?例如:
$array = [
'name' => [
'first' => 'John',
'last' => 'Smith',
],
'levels' => [
'maths' => 6,
'science' => 10,
],
'age' => 25,
];
$slice = array_dot_only($array, ['name.first', 'levels']);
/*
[
'name' => [
'first' => 'John',
],
'levels' => [
'maths' => 6,
'science' => 10,
],
];
*/发布于 2020-06-24 02:56:26
基于@Edwin的答案:
function array_dot_only(array $array, $keys): array
{
$newArray = [];
$default = new stdClass;
foreach ((array)$keys as $key) {
$value = array_get($array, $key, $default);
if ($value !== $default) {
array_set($newArray, $key, $value);
}
}
return $newArray;
}这使该函数更接近于array_only,因为它将包含设置了键但值为空的项。为此,它使用一个对象作为默认值,并检查$value是否为相同的对象。
发布于 2018-09-06 06:52:44
Laravel通过支持点符号的现有助手array_set和array_get简化了这一过程。
function array_dot_only($array, $keys) {
$newArray = [];
foreach((array) $keys as $key) {
array_set($newArray, $key, array_get($array, $key));
}
return $newArray;
}发布于 2019-07-08 15:21:14
这里是对@Devon的答案的一个小小的修改:
function array_dot_only(array $array, $keys): array
{
$newArray = [];
foreach ((array)$keys as $key) {
$value = array_get($array, $key);
if (isset($value)) {
array_set($newArray, $key, $value);
}
}
return $newArray;
}此更改将使其行为与array_only()更加一致,因为array_only()不会插入源$array中不存在的字段。
https://stackoverflow.com/questions/52194176
复制相似问题