Ошибка PHP: нельзя использовать объект типа stdClass как массив (проблемы с массивом и объектом)

Я пытался скопировать этот код:

<?php foreach ($products as $product) { $id = $product['id']; $name = $product['name']; $description = $product['description']; $price = $product['price']; ?> <tr> <td><img src="<?php echo $product['picture']; ?>" /></td> <td><b><?php echo $name; ?></b><br /> <?php echo $description; ?><br /> Price:<big style="color:green"> $<?php echo $price; ?></big><br /><br /> <?php echo form_open('cart/add'); echo form_hidden('id', $id); echo form_hidden('name', $name); echo form_hidden('price', $price); echo form_submit('action', 'Add to Cart'); echo form_close(); ?> </td> </tr> <tr><td colspan="2"><hr size="1" /></td> <?php } ?> 

и вот мой код:

 <?php foreach ($blogs as $blog) { $id = $blog['id']; $title = $blog['title']; $content = $blog['content']; ?> <h1><?php echo $title; ?></h1> <h1> <?php echo $content; ?> </h1> <?php } ?> 

Я получаю эту ошибку каждый раз, когда запускаю свой код: «Нельзя использовать объект типа stdClass as array»

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

Если вы не знаете имена переменных, просто выполните var_dump($blog); в пределах цикла, чтобы увидеть их.

Простейший метод – прямой доступ к блогу $ как объекту:

Попробуйте (при условии, что эти переменные верны):

 <?php foreach ($blogs as $blog) { $id = $blog->id; $title = $blog->title; $content = $blog->content; ?> <h1> <?php echo $title; ?></h1> <h1> <?php echo $content; ?> </h1> <?php } ?> 

Альтернативный метод – доступ к блогу $ $ как массив:

Кроме того, вы можете превратить $blog в массив с get_object_vars ( документацией ):

 <?php foreach($blogs as &$blog) { $blog = get_object_vars($blog); $id = $blog['id']; $title = $blog['title']; $content = $blog['content']; ?> <h1> <?php echo $title; ?></h1> <h1> <?php echo $content; ?> </h1> <?php } ?> 

Стоит отметить, что это не обязательно будет работать с вложенными объектами, поэтому его жизнеспособность полностью зависит от структуры вашего объекта $blog .

Лучше, чем любой из вышеперечисленных – встроенный PHP-синтаксис

Сказав все это, если вы хотите использовать PHP в наиболее читаемом виде, ни одно из перечисленных выше не является правильным. При использовании PHP, смешанного с HTML, многие считают, что многие используют альтернативный синтаксис PHP, это уменьшит весь код от девяти до четырех строк:

 <?php foreach($blogs as $blog): ?> <h1><?php echo $blog->title; ?></h1> <p><?php echo $blog->content; ?></p> <?php endforeach; ?> 

Надеюсь, это помогло.

$ blog – объект, а не массив

попробуйте использовать $blog->id вместо $blog['id']

Там могут быть две проблемы

 1) $blogs may be a stdObject 

или

 2) The properties of the array might be the stdObject 

Попробуйте использовать var_dump ($ blogs) и посмотрите фактическую проблему, если в свойствах массива stdObject попробует это сделать

 $blog->id; $blog->content; $blog->title; 

$ blog – это объект, а не массив, поэтому вы должны получить к нему доступ так:

 $blog->id; $blog->title; $blog->content; 

Доступ к объекту StdClass осуществляется с помощью ->

 foreach ($blogs as $blog) { $id = $blog->id; $title = $blog->title; $content = $blog->content; } 

Если вы перебираете объект вместо массива, вам нужно получить доступ к свойствам, используя:

 $id = $blog->id; $title = $blog->title; $content = $blog->content; 

Это или изменить объект на массив.