Не удается получить доступ к данным из массива внутри цикла foreach — Codeigniter

#php #arrays #codeigniter #codeigniter-3 #arrayobject

#php #массивы #кодовое устройство #кодовый конструктор-3 #arrayobject

Вопрос:

В моей базе данных есть 2 строки значений : Test2 campaign amp; premium dove

просмотр страницы

 foreach ($estedit as $estrow) {   //print_r($estrow);  echo $estrow-gt;name;  }  

Приведенный выше код показывает эти 2 значения внизу, как на приведенном ниже изображении, но отображает ошибку Trying to get property 'name' of non-object .

Снимок экрана с Ошибкой:

https://i.stack.imgur.com/g7wtz.png

print_r($estrow); внутри foreach цикла отображаются приведенные ниже данные:

stdClass Object ( [est_id] =gt; 3 [name] =gt; Test2 campaign ) stdClass Object ( [est_id] =gt; 1 [name] =gt; premium dove ) .

Доступ к name полю как $estrow-gt;name показывает ошибку Illegal string offset 'name' . Что я делаю не так? Как я могу получить доступ к этому name полю здесь ?

Контроллер

 $estedit[] = '';   foreach ($est_id as $item) {   $estedit[] = $this-gt;Report-gt;get_estedit($item);   $estlineedit[] = $this-gt;Report-gt;get_estline_edit($item);  }  $data['estedit'] = $estedit;  $data['estlineedit'] = $estlineedit;  $data['date'] = $date;  $this-gt;load-gt;view('reports/download_report_view', $data);  

Комментарии:

1. Я верю, что вы переназначаетесь $estedit где-то внутри foreach цикла

2. @Антон Нет, я этого не делал

3. @Anton см. текст запроса на обновление. я добавил свою часть кода контроллера, откуда передаю эти данные для просмотра

4. Не имеет смысла, что это будет показывать значения, которые вам нужны в первую очередь, если он не сможет получить к ним доступ. «print_r($estrow); внутри каждого цикла отображаются приведенные ниже данные» — хорошо, но это не обязательно означает, что ошибка возникает из тех же итераций цикла, в которых вы получаете этот отладочный вывод. print_r(null) или print_r(false) , например, привести к абсолютно отсутствию видимого вывода — так что, если у вас было больше элементов, $estedit чем вы думали, возможно, и один из них был нулевым или ложным, это абсолютно объяснило бы то, что вы видите.

5. Используйте var_dump вместо print_r этого , это лучший инструмент отладки. И используйте его, чтобы проверить, что $estedit содержится, вместо того, чтобы пытаться выяснить, что происходит только внутри цикла.

Ответ №1:

Вы задаете пустую строку в качестве первого элемента $estedit

 $estedit[] = '';  

Похоже, ты хочешь

 $estedit = [];  

вместо

Ответ №2:

Используйте это:

 $estedit = array();   

Или это:

 $estedit = [];   

Вместо:

 $estedit[] = '';