Frage PHP-Fehler: Objekt des Typs stdClass kann nicht als Array verwendet werden (Array- und Objektprobleme) [duplizieren]


Diese Frage hat hier bereits eine Antwort:

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 des Typs stdClass kann nicht als Array verwendet werden"


20
2018-05-16 13:52


Ursprung


Antworten:


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 und verwenden daher unterschiedliche Syntax für den Zugriff auf Daten.

Wenn Sie die Variablennamen nicht kennen, tun Sie einfach a var_dump($blog); innerhalb der Schleife, um sie zu sehen.

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

Versuchen Sie (vorausgesetzt, diese Variablen sind korrekt):

<?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 - Zugriff auf $ blog als Array:

Alternativ können Sie sich möglicherweise umdrehen $blog in ein Array mit get_object_vars (Dokumentation):

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

Es ist erwähnenswert, dass dies nicht unbedingt mit verschachtelten Objekten funktionieren wird, so hängt seine Lebensfähigkeit vollständig von der Struktur Ihres $blog Objekt.

Besser als jede der oben genannten - Inline-PHP-Syntax

Wenn Sie all das gesagt haben, wenn Sie PHP auf die lesbarste Art und Weise verwenden wollen, ist keines der oben genannten richtig. Wenn PHP mit HTML gemischt wird, wird es von vielen als Best Practice angesehen, PHP zu verwenden alternative SyntaxDies 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.


51
2018-05-16 13:54



$ blog ist ein Objekt und kein Array

versuche es mit $blog->id Anstatt von $blog['id']


18
2018-05-16 13:29



$ blog ist ein Objekt, kein Array, also sollten Sie wie folgt darauf zugreifen:

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

4
2018-05-16 13:30



Es könnte zwei Probleme geben

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 von Array stdObject versuchen, wie folgt

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

3
2018-05-16 13:30



Wenn Sie über ein Objekt statt über ein Array iterieren, müssen Sie auf die Eigenschaften zugreifen:

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

Das oder ändern Sie Ihr Objekt in ein Array.


3
2018-05-16 13:54



Auf das StdClass-Objekt wird mit zugegriffen ->

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

3
2018-05-16 13:55