web-dev-qa-db-fra.com

PHP Erreur: impossible d'utiliser un objet de type stdClass comme tableau (problèmes de tableau et d'objet)

J'essayais de copier ce code:

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

et voici mon 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
}
?>

J'obtiens cette erreur chaque fois que j'exécute mon code: "Impossible d'utiliser un objet de type stdClass en tant que tableau"

L'exemple que vous avez copié utilise des données sous la forme d'un tableau contenant des tableaux, vous utilisez des données sous la forme d'un tableau contenant des objets. Les objets et les tableaux ne sont pas identiques et, de ce fait, ils utilisent des syntaxes différentes pour accéder aux données.

Si vous ne connaissez pas les noms de variable, faites un var_dump($blog); dans la boucle pour les voir.

La méthode la plus simple - accédez directement à $ blog en tant qu'objet:

Essayez (en supposant que ces variables sont correctes):

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

La méthode alternative - accéder à $ blog en tant que tableau:

Alternativement, vous pourrez peut-être tourner $blog dans un tableau avec 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 } ?> 

Il est à noter que cela ne fonctionnera pas nécessairement avec des objets imbriqués, sa viabilité dépend donc entièrement de la structure de votre $blog objet.

Meilleur que l'un des précédents - Inline PHP Syntaxe

Ceci dit, si vous voulez utiliser PHP de la manière la plus lisible, aucune des réponses ci-dessus n’est correcte. Lorsque vous utilisez PHP mélangé avec HTML, c’est Considéré comme la meilleure pratique par beaucoup d'utiliser PHP syntaxe alternative , cela réduirait votre code entier de neuf à quatre lignes:

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

J'espère que cela a aidé.

59
Glitch Desire

$ blog est un objet et non un tableau

essayez d'utiliser $blog->id au lieu de $blog['id']

24
Anigel

$ blog est un objet, pas un tableau, vous devriez donc y accéder comme ceci:

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

Il pourrait y avoir deux problèmes

1) $blogs may be a stdObject

ou

2) The properties of the array might be the stdObject

Essayez d'utiliser var_dump ($ blogs) et voyez le problème si les propriétés de array ont stdObject

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

Si vous parcourez un objet au lieu d'un tableau, vous devez accéder aux propriétés à l'aide de:

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

Cela, ou changez votre objet en un tableau.

3
CashIsClay

L'objet StdClass est accessible à l'aide de ->

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