Laravel集合,如何引用如$ item-> name而不是$ item ['name']

时间:2017-08-10 08:19:42

标签: php arrays laravel collections

我也想知道它们两者的名称是什么?例如引用的数组项如$ item ['name']和$ item-> name如果有一个术语! (不是关键,价值观)

$items = collection([
    [
        'name' => 'test item 1',
        'description' => 'this is a description',
    ],
    [
        'name' => 'test item 1',
        'description' => 'this is a description',
    ],
    [
        'name' => 'test item 1',
        'description' => 'this is a description',
    ],
]);

然后在刀片或任何id爱情中能够像

那样引用它们
foreach($items as $item) {
    echo $item->name;
}

而不是

foreach($items as $item) {
    echo $item['name'];
}

修改

解决了谢谢你们的答案。

$collection->map(function ($section) {
    return (object) [
        'label' => $section['label'],
        'items' => collect($section['items'])->map(function ($item) {
            return (object) $item;
        }),
    ];
});

下面的完整代码也用于检查集合中是否存在项目。

protected $collection = [];

public function __construct()
{
    parent::__construct();
    $this->collection = collect([
        [
            'label' => 'Section label 1',
            'items' => [
                [
                    'label' => 'Item label 1',
                    'description' => 'Item description',
                ],
            ],
        ],
        [
            'label' => 'Section label 2',
            'items' => [
                [
                    'label' => 'Item label 2',
                    'description' => 'Item description',
                ],
            ],
        ],
        [
            'label' => 'Section label 3',
            'items' => [
                [
                    'label' => 'Item label 3',
                    'description' => 'Item description',
                ],
            ],
        ],
    ])
    ->map(function ($section) {
        return (object) [
            'label' => $section['label'],
            'items' => collect($section['items'])->map(function ($item) {
                return (object) $item;
            }),
        ];
    });
}

public function show($slug = '')
{
    $item = $this->getItem($slug);

    if (null === $item) {
        abort(404);
    }

    return view('show')
        ->withItem($item);
}

protected function getItem($slug)
{
    return $this
        ->collection
        ->flatMap(function ($section) {
            return $section->items;
        })
        ->first(function ($item) use ($slug) {
            return str_slug($item->label) === $slug;
        });
}

2 个答案:

答案 0 :(得分:2)

试试这个

$items= json_decode(json_encode((object) $items), FALSE);

json_decode第二个参数如果为true则会将结果转换为array,否则结果为object

查看here以供参考

答案 1 :(得分:1)

您可以使用Collection::map功能。

$items = $items->map(function($item) { return (object) $item; })

然后在你的模板中:

@foreach ($items as $item)
    {{ $item->name }}
@endforeach