首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带点符号的Laravel array_only

带点符号的Laravel array_only
EN

Stack Overflow用户
提问于 2018-09-06 06:31:05
回答 3查看 2.5K关注 0票数 0

Laravel有一个帮助器,它允许你只获得你想要的密钥,如下所示:

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

代码语言:javascript
复制
$array = ['name' => 'Desk', 'price' => 100, 'orders' => 10];

$slice = array_only($array, ['name', 'price']);

// ['name' => 'Desk', 'price' => 100]

但是,如何才能获得同样允许使用点符号的array_only等效项呢?例如:

代码语言:javascript
复制
$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,
    ],
];
*/
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-24 02:56:26

基于@Edwin的答案:

代码语言:javascript
复制
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是否为相同的对象。

票数 2
EN

Stack Overflow用户

发布于 2018-09-06 06:52:44

Laravel通过支持点符号的现有助手array_set和array_get简化了这一过程。

代码语言:javascript
复制
function array_dot_only($array, $keys) {
    $newArray = [];
    foreach((array) $keys as $key) {
        array_set($newArray, $key, array_get($array, $key));
    }
    return $newArray;
}
票数 3
EN

Stack Overflow用户

发布于 2019-07-08 15:21:14

这里是对@Devon的答案的一个小小的修改:

代码语言:javascript
复制
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中不存在的字段。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52194176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档