it-swarm.com.de

PHP Fehler: Objekt vom Typ stdClass kann nicht als Array verwendet werden (Array- und Objektprobleme)

Ich habe versucht, diesen Code zu kopieren:

<?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
}
?>

und hier ist mein Code:

<?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
}
?>

Ich erhalte diesen Fehler jedes Mal, wenn ich meinen Code ausführe: "Objekt vom Typ stdClass kann nicht als Array verwendet werden"

Das Beispiel, aus dem Sie kopiert haben, verwendet Daten in Form eines Arrays, das Arrays enthält. Sie verwenden Daten in Form eines Arrays, das Objekte enthält. Objekte und Arrays sind nicht gleich Objekte und Arrays verwenden unterschiedliche Syntaxen für den Zugriff auf Daten.

Wenn Sie die Variablennamen nicht kennen, führen Sie einfach eine var_dump($blog); innerhalb der Schleife aus, um sie anzuzeigen.

Die einfachste Methode - greifen Sie direkt auf $ blog als Objekt zu:

Versuchen Sie (unter der Annahme, dass diese Variablen korrekt sind):

<?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 } ?>

Die alternative Methode - greifen Sie auf $ blog als Array zu:

Alternativ können Sie möglicherweise $blog Mit get_object_vars In ein Array umwandeln ( 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 } ?> 

Erwähnenswert ist, dass dies nicht unbedingt mit verschachtelten Objekten funktioniert. Die Funktionsfähigkeit des Objekts hängt also vollständig von der Struktur Ihres $blog - Objekts ab.

Besser als die beiden oben genannten - Inline PHP Syntax

Abgesehen davon, wenn Sie PHP in der am besten lesbaren Art und Weise verwenden möchten, ist keines der obigen Argumente richtig. Wenn Sie PHP gemischt mit HTML verwenden, ist es Dies wird von vielen als Best Practice für die Verwendung von PHP's alternative Syntax angesehen und würde Ihren gesamten Code von neun auf vier Zeilen reduzieren:

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

Hoffe das hat geholfen.

59
Glitch Desire

$ blog ist ein Objekt, kein Array

versuche es mit $blog->id anstatt $blog['id']

24
Anigel

$ blog ist ein Objekt, kein Array, daher sollten Sie folgendermaßen darauf zugreifen:

$blog->id;
$blog->title;
$blog->content;
4
Software Guy

Möglicherweise gibt es zwei Probleme

1) $blogs may be a stdObject

oder

2) The properties of the array might be the stdObject

Versuchen Sie es mit var_dump ($ blogs) und sehen Sie das eigentliche Problem, wenn die Eigenschaften des Arrays stdObject haben

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

Wenn Sie ein Objekt anstelle eines Arrays durchlaufen, müssen Sie auf die Eigenschaften wie folgt zugreifen:

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

Das, oder ändern Sie Ihr Objekt in ein Array.

3
CashIsClay

Auf das StdClass-Objekt wird mit -> Zugegriffen.

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