Ошибка 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 как массив"
Ответы
Ответ 1
В примере, который вы скопировали, используются данные в форме массива, содержащего массивы, вы используете данные в форме массива, содержащего объекты. Объекты и массивы не совпадают, и из-за этого они используют разные синтаксисы для доступа к данным.
Если вы не знаете имена переменных, просто выполните 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; ?>
Надеюсь, что это помогло.
Ответ 2
$blog - объект, а не массив
попробуйте использовать $blog->id
вместо $blog['id']
Ответ 3
Там могут быть две проблемы
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;
Ответ 4
$blog - это объект, а не массив, поэтому вы должны получить к нему доступ так:
$blog->id;
$blog->title;
$blog->content;
Ответ 5
Доступ к объекту StdClass осуществляется с помощью ->
foreach ($blogs as $blog) {
$id = $blog->id;
$title = $blog->title;
$content = $blog->content;
}
Ответ 6
Если вы выполняете итерацию по объекту вместо массива, вам нужно получить доступ к свойствам, используя:
$id = $blog->id;
$title = $blog->title;
$content = $blog->content;
Это или изменить объект на массив.