Доступ к объекту внутри массива, который находится внутри другого объекта, используя PHP

0

Я новичок в CI. Используя codeigniter, я пытаюсь напечатать категории и их элементы, как показано ниже:

Название категории 1

  1. пункт 1
  2. пункт 2

Название категории 2

  1. пункт 3

  2. пункт 4

  3. пункт 5

и так далее. Я построил массив и subarray внутри контроллера, как показано ниже:

$data['categories'] = $this->publicpages_model->getcategories();
foreach($data['categories'] as $category)
{
    $data['categories'][$category->cID]= $this->publicpages_model->getitems($category->cID);
}

В представлении я пытаюсь использовать следующий код, но я не могу его завершить, чтобы получить желаемый результат, как обсуждалось выше.

foreach($categories AS $category)
{
    echo '<h1>' . $category->name . '</h1>';

    //Missing code to print the items

    echo "<br>";
}

Хотя название категории напечатано, но я также получаю следующую ошибку:

Severity: Notice
Message: Trying to get property of non-object

print_r ($ categories) дает следующий результат:

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 дает следующий результат:

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) }

Пожалуйста, помогите с решением.

Теги:
database
arrays
codeigniter-3

2 ответа

1

В вашем коде есть небольшая проблема. То, что вы пытаетесь сделать, прекрасно, но как вы это делаете, проблема.

В этом цикле foreach вы изменяете тот же массив, который вы зацикливаете; следовательно, он полностью разрушает структуру массива $data['categories']. В результате, ваш второй элемент массива не имеет ключа name, поэтому он выдает это предупреждение.

foreach($data['categories'] as $category)
{
    $data['categories'][$category->cID] = ...;
}

Если вы пытались получить подэлементы каждой категории и добавить их в качестве нового ключа, вам нужно изменить массив $category. Не внешний массив :) Так измените его вот так.

foreach($data['categories'] as $category)
{
    $category->subItems = $this->publicpages_model->getitems($category->cID);
}

Или, если вы хотите использовать $category->cID вместо ключевых subItems, вы можете изменить приведенное выше:

foreach($data['categories'] as $category)
{
    $category->{$category->cID} = $this->publicpages_model->getitems($category->cID);
}

Надеюсь, это поможет :) не стесняйтесь спрашивать что-либо, если это не понятно.

0

imho, что вы делаете, не имеет смысла - вы должны добавить предметы в категорию

попробуйте следующее

ваш контроллер

$data['categories'] = $this->publicpages_model->getcategories();
foreach($data['categories'] as $category)
{
    $category->arrItems = $this->publicpages_model->getitems($category->cID);
}

ваш взгляд

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>";
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню