【问题标题】:Add more object(stdClass) with the same name with php添加更多与php同名的对象(stdClass)
【发布时间】:2019-03-12 13:31:48
【问题描述】:

我用 php 创建了一个带有新 stdClass 的新对象。

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

这是结果:

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 帮助我。

【问题讨论】:

  • 听起来你一直在重写同一个 summary 对象,因为它不应该有多个 objects 和同一个 key
  • 你能解释一下你为什么要这样做吗?你会如何用相同的键区分这些不同的元素?

标签: php object stdclass


【解决方案1】:

你不能有两个同名的属性; $foo-&gt;summary 必须指代一个事物。

你可以做的就是将该属性的值设置为一个数组:

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

然后将项目添加到该数组中:

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

这和设置一个普通变量一样,数组的使用方式都一样。

(如果您对各个节点使用类,而不是一大堆 stdClass 对象,那么所有这些可能会更清楚,但我会给您带来疑问,并假设您有充分的理由这样做。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-31
    • 2014-09-14
    • 2012-08-21
    • 2015-12-13
    • 2021-01-19
    • 2014-02-28
    • 2013-05-12
    • 1970-01-01
    相关资源
    最近更新 更多