Добавить еще один объект (stdClass) с тем же именем с php - PullRequest
1 голос
/ 12 марта 2019

Я создал с помощью php новый объект с новым stdClass.

<code>$response->node1->node2->summary = new stdClass();
$response->node1->node2->summary->text = "lorem ipsum";
echo "<pre>";
var_dump( $response );
echo "
»

Это результат:

object(stdClass)#17 (1) {
  ["node1"]=>
  object(stdClass)#10 (1) {
    ["node2"]=>
    object(stdClass)#12 (1) {
      ["summary"]=>
      object(stdClass)#16 (1) {
        ["text"]=>
        string(11) "lorem ipsum"
      }
    }
  }
}

Как можно создать больше объектов в цикле с именем "summary"? Результат должен выглядеть так:

object(stdClass)#17 (1) {
  ["node1"]=>
  object(stdClass)#10 (1) {
    ["node2"]=>
    object(stdClass)#12 (1) {
      ["summary"]=>
      object(stdClass)#16 (1) {
        ["text"]=>
        string(11) "lorem ipsum"
      }
      ["summary"]=>
      object(stdClass)#17 (1) {
        ["text"]=>
        string(11) "different content"
      }
    }
  }
}

в цикле for я всегда получаю содержимое, которое является последним в цикле for.

THX 4, помогая мне.

1 Ответ

4 голосов
/ 12 марта 2019

Вы не можете иметь два свойства с одинаковым именем;$foo->summary должен ссылаться на одну вещь.

Что вы можете сделать, это установить значение этого свойства в виде массива:

$response->node1->node2->summary = [];

И затем добавить элементы в этот массив:

$response->node1->node2->summary[] = $summary;

Это то же самое, что и установка простой переменной, и массив можно использовать одинаково.

(Все это, вероятно, будет понятнее, если вы используете классыдля различных узлов, а не для большого гнезда stdClass объектов, но я дам вам преимущество сомнения и предположу, что у вас есть веская причина сделать это таким образом.)

...