#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[] = '';