Я пытался скопировать этот код:
<?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;
Это или изменить объект на массив.