Подтвердить что ты не робот

Ошибка PHP: нельзя использовать объект типа stdClass как массив (проблемы с массивом и объектом)

Я пытался скопировать этот код:

<?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 как массив"

4b9b3361

Ответ 1

В примере, который вы скопировали, используются данные в форме массива, содержащего массивы, вы используете данные в форме массива, содержащего объекты. Объекты и массивы не совпадают, и из-за этого они используют разные синтаксисы для доступа к данным.

Если вы не знаете имена переменных, просто выполните var_dump($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 в массив с get_object_vars (документацией):

<?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, смешанного с HTML, многие считают, что многие используют PHP альтернативный синтаксис, это уменьшит весь код от девяти до четырех строк:

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

Надеюсь, что это помогло.

Ответ 2

$blog - объект, а не массив

попробуйте использовать $blog->id вместо $blog['id']

Ответ 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

$blog - это объект, а не массив, поэтому вы должны получить к нему доступ так:

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

Ответ 5

Доступ к объекту StdClass осуществляется с помощью ->

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

Ответ 6

Если вы выполняете итерацию по объекту вместо массива, вам нужно получить доступ к свойствам, используя:

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

Это или изменить объект на массив.