首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP访问位于另一个对象内的数组中的对象

问使用PHP访问位于另一个对象内的数组中的对象
EN

Stack Overflow用户
提问于 2017-12-21 07:39:17
回答 2查看 130关注 0票数 0

我是新来的。使用代码点火器,我试图打印类别和它们的项目如下:

类别1名

  1. 项目1
  2. 项目2

类别2名

  1. 项目3
  2. 项目4
  3. 项目5

诸若此类。我在控制器内部构建了一个数组和子数组,如下所示:

代码语言:javascript
复制
$data['categories'] = $this->publicpages_model->getcategories();
foreach($data['categories'] as $category)
{
    $data['categories'][$category->cID]= $this->publicpages_model->getitems($category->cID);
}

在视图中,我试图使用下面的代码,但是我无法像上面讨论的那样完成它以获得所需的输出。

代码语言:javascript
复制
foreach($categories AS $category)
{
    echo '<h1>' . $category->name . '</h1>';

    //Missing code to print the items

    echo "<br>";
}

虽然类别的名称是打印出来的,但我也得到了以下错误:

代码语言:javascript
复制
Severity: Notice
Message: Trying to get property of non-object

print_r($categories)给出了以下结果:

代码语言:javascript
复制
Array ( [0] => stdClass Object ( [cID] => 1 [name] => Breakfast ) [1] => Array ( [0] => stdClass Object ( [itemID] => 1 [name] => Aaloo Paratha [description] => descriptio 1 [menu] => 1 [price] => 22 [tax] => 20 [sStatus] => ) ) [2] => stdClass Object ( [cID] => 7 [name] => Fast Food ) [5] => Array ( [0] => stdClass Object ( [itemID] => 5 [name] => Missi Roti [description] => Hot and Crunchy [menu] => 5 [price] => 5 [tax] => 1 [sStatus] => 1 ) ) [7] => )

vardump提供了以下输出:

代码语言:javascript
复制
array(5) { [0]=> object(stdClass)#22 (2) { ["cID"]=> string(1) "1" ["name"]=> string(9) "Breakfast" } [1]=> array(1) { [0]=> object(stdClass)#25 (7) { ["itemID"]=> string(1) "1" ["name"]=> string(13) "Aaloo Paratha" ["description"]=> string(12) "descriptio 1" ["menu"]=> string(1) "1" ["price"]=> string(2) "22" ["tax"]=> string(2) "20" ["sStatus"]=> string(0) "" } } [2]=> object(stdClass)#24 (2) { ["cID"]=> string(1) "7" ["name"]=> string(9) "Fast Food" } [5]=> array(1) { [0]=> object(stdClass)#26 (7) { ["itemID"]=> string(1) "5" ["name"]=> string(10) "Missi Roti" ["description"]=> string(15) "Hot and Crunchy" ["menu"]=> string(1) "5" ["price"]=> string(1) "5" ["tax"]=> string(1) "1" ["sStatus"]=> string(1) "1" } } [7]=> bool(false) }

请帮忙解决这个问题。

EN

回答 2

Stack Overflow用户

发布于 2017-12-21 10:38:49

您的代码中有一个小问题。你想做的事很好,但你怎么做才是问题所在。

在这个foreach循环中,您要修改与循环相同的数组;因此,它完全破坏了$data['categories']数组的结构。因此,数组的第二个元素没有name键,因此它会抛出该警告。

代码语言:javascript
复制
foreach($data['categories'] as $category)
{
    $data['categories'][$category->cID] = ...;
}

如果您试图获取每个类别的子项,并将它们作为新键添加,则需要修改$category数组。而不是外部数组:),所以这样修改它。

代码语言:javascript
复制
foreach($data['categories'] as $category)
{
    $category->subItems = $this->publicpages_model->getitems($category->cID);
}

或者,如果您希望使用$category->cID而不是键subItems,则可以将上面的内容更改为:

代码语言:javascript
复制
foreach($data['categories'] as $category)
{
    $category->{$category->cID} = $this->publicpages_model->getitems($category->cID);
}

我希望它有帮助:)如果不清楚的话,可以随意问任何事情。

票数 1
EN

Stack Overflow用户

发布于 2017-12-21 08:33:44

你所做的没有任何意义--你应该把这些项目添加到这个类别中。

尝试下面的方法

您的控制器

代码语言:javascript
复制
$data['categories'] = $this->publicpages_model->getcategories();
foreach($data['categories'] as $category)
{
    $category->arrItems = $this->publicpages_model->getitems($category->cID);
}

您的视图

代码语言:javascript
复制
foreach($categories AS $category)
{
    echo '<h1>' . $category->name . '</h1>';

    if (isset($category->arrItems) && is_array($category->arrItems))
    {
        foreach($category->arrItems AS $objItem)
        {
            print_r($objItem);
        }
    }

    echo "<br>";
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47920106

复制
相关文章

相似问题

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