Laravel 4:迭代对象数组

时间:2014-05-04 11:07:43

标签: php arrays json laravel-4

我正在慢慢学习Laravel / PHP并正在构建基本CMS的菜单系统。我已将菜单存储在数据库中作为json。这样我就可以将它用于其他应用程序等。

我正在尝试解码json并循环显示它以显示我的菜单。新数组是一个对象数组。我的问题是:

•我如何迭代这个数组?当我尝试获取$ item-> id时,它可以正常工作。但是,当我尝试获取$ item->标题时,我得到一个ErrorException

我确信这很简单。它让我疯了!谢谢花时间看......

控制器

public function edit($id)
{
    $view = View::make('admin.menus.edit');
    $view['seo_title'] = Lang::get('admin.system_name') . ' | Edit ' . Lang::choice('admin.menus', 1);
    $view['id'] = $id;
    $view['menu'] = Menus::find($id);
    $view['menuitems'] = json_decode($view->menu->menu_items);
    return $view;
}

使用foreach查看

    @foreach( $menuitems as $item)
    <h4>{{ $item->title }}</h4>
@endforeach

json in menu_items col

[{"title":"Title","link":"/test.html","id":"1","children":[{"title":"Title","link":"/test.html","id":"2","children":[{"title":"Title","link":"/test.html","id":"3"}]}]},{"id":"4"},{"id":"5","children":[{"id":"6","children":[{"id":"7"}]}]},{"id":"8"},{"id":"9"}]

json_decode之后的对象

Array ( [0] => stdClass Object (
                        [title] => Title
                        [link] => /test.html
                        [id] => 1
                        [children] => Array ( [0] => stdClass Object (
                                                                        [title] => Title
                                                                        [link] => /test.html
                                                                        [id] => 2 [children] => Array (
                                                                                                    [0] => stdClass Object (
                                                                                                    [title] => Title
                                                                                                    [link] => /test.html
                                                                                                    [id] => 3
                                                                                                    )
                                                                                                )
                                                                    )
                                            )
                        )

[1] => stdClass Object (
                        [id] => 4
                        )

[2] => stdClass Object (
                        [id] => 5
                        [children] => Array ( [0] => stdClass Object (
                                                                        [id] => 6
                                                                        [children] => Array (
                                                                                            [0] => stdClass Object (
                                                                                            [id] => 7
                                                                                            )
                                                                                        )
                                                                    )
                                            )
                        )

[3] => stdClass Object (
                        [id] => 8
                        )

[4] => stdClass Object (
                        [id] => 9 
                        )

再次感谢 - 我希望有人能发现我的错误。

1 个答案:

答案 0 :(得分:2)

您的json数据只有第一项的标题。其他菜单项的标题未定义,因此当您尝试访问foreach循环中未定义的标题时,可能会收到未定义的属性警告。

您可以检查循环中是否有标题

@foreach( $menuitems as $item)
    <h4>{{{ isset($item->title) ? $item->title : 'Default Title' }}}</h4>
@endforeach

或者你必须确保数据集(json)中的每个菜单项都有一个title属性。