我试图复制此代码:
<?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类型的对象作为数组”
答案 0 :(得分:55)
您复制的示例是使用包含数组的数组形式的数据,您正在使用包含对象的数组形式的数据。对象和数组不一样,因此它们使用不同的语法来访问数据。
如果您不知道变量名称,只需在循环中执行var_dump($blog);
即可查看它们。
最简单的方法 - 直接将$ 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作为数组访问:
或者,您可以将$blog
转换为包含get_object_vars
(documentation)的数组:
<?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,以上都不是正确的。当使用与HTML混合的PHP时,许多人认为最好使用PHP的alternative syntax,这会将整个代码从9行减少到4行:
<?php foreach($blogs as $blog): ?>
<h1><?php echo $blog->title; ?></h1>
<p><?php echo $blog->content; ?></p>
<?php endforeach; ?>
希望这会有所帮助。
答案 1 :(得分:21)
$ blog是一个不是数组的对象
尝试使用$blog->id
代替$blog['id']
答案 2 :(得分:4)
$ blog是一个对象,而不是一个数组,所以你应该这样访问它:
$blog->id;
$blog->title;
$blog->content;
答案 3 :(得分: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 :(得分:3)
如果要迭代对象而不是数组,则需要使用以下命令访问属性:
$id = $blog->id;
$title = $blog->title;
$content = $blog->content;
那,或者将您的对象更改为数组。
答案 5 :(得分:3)
使用->
foreach ($blogs as $blog) {
$id = $blog->id;
$title = $blog->title;
$content = $blog->content;
}