私はこのコードをコピーしようとしていた:
<?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型のオブジェクトを配列として使用できません」
コピー元の例では、配列を保持している配列の形式のデータを使用しています。オブジェクトを保持している配列の形式のデータを使用しています。オブジェクトと配列は同じではないため、データにアクセスするために異なる構文を使用します。
変数名がわからない場合は、ループ内で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を使用したい場合は、上記のどちらも適切ではありません。PHP PHPの 代替構文 を使用する多くの人がベストプラクティスと見なしているため、コード全体が9行から4行に削減されます。
<?php foreach($blogs as $blog): ?>
<h1><?php echo $blog->title; ?></h1>
<p><?php echo $blog->content; ?></p>
<?php endforeach; ?>
これが役に立てば幸いです。
$ blogは配列ではなくオブジェクトです
$blog->id
の代わりに$blog['id']
を使用してみてください
$ blogは配列ではなくオブジェクトなので、次のようにアクセスする必要があります。
$blog->id;
$blog->title;
$blog->content;
2つの問題があるかもしれません
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;
配列ではなくオブジェクトを反復処理する場合、次を使用してプロパティにアクセスする必要があります。
$id = $blog->id;
$title = $blog->title;
$content = $blog->content;
または、オブジェクトを配列に変更します。
StdClassオブジェクトにアクセスするには、->
foreach ($blogs as $blog) {
$id = $blog->id;
$title = $blog->title;
$content = $blog->content;
}