为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 对象到 JSON:如何创建具有多个递归子级的类?

PHP 对象到 JSON:如何创建具有多个递归子级的类?

PHP
繁花不似锦 2023-06-24 17:57:13
我需要创建一个 PHP 类,该类将具有该类的多个父子关系,以便转换后的 JSON 字符串看起来与此类似。如果“children”为空数组,如何使其不出现在 JSON 中?{   name: "Element Parent",    code: "000"    children: [        {            name: "Element Child 1"            code: "001"            children: [                {                    name: "Element Child 1A"                    code: "001A"                },                {                    name: "Element Child 1B"                    code: "001B"                    children: [                        {                            name: "Element Child 1BA"                            code: "001BA"                        }                    ]                }            ]        }        ,        {            name: "Element Child 2"            code: "002"        }    ]}我正在尝试创建一个可以转换为上面的 JSON 字符串的 PHP 类。<?phpclass Element implements \JsonSerializable{    private $name;    private $code;        public function __construct($name, $code, )    {        $this->name = $name;        $this->code = $code;    }        public function jsonSerialize()    {        return get_object_vars($this);    }        public function toJSON(){        return json_encode($this);    }        public $children[] = array(); // to contain Element children class }$element = new Element("Element Parent", 000);$elementChild1 = new Element("Element Child 1", "001");$elementChild1A = new Element("Element Child 1A", "001A");$elementChild1B = new Element("Element Child 1B", "001B");$elementChild1BA = new Element("Element Child 1BA", "001BA");$elementChild1B->children[] = $elementChild1BA;$elementChild1->children[] = $elementChild1A;$elementChild1->children[] = $elementChild1B;$element->children[] = elementChild1;$elementChild2 = new Element("Element Child 2", "002");$element->children[] = elementChild2;echo $element->toJSON();?>非常感谢。
查看完整描述

1 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

在jsonSerialize您实现的函数中,您可以更改序列化行为。在那里,您可以检查是否有儿童,并在需要时将其留在外面。在这种情况下,你最终会得到这样的结果:


public function jsonSerialize() {

  $data = [

    "name" => $this->name,

    "code" => $this->code

  ];


  if(!empty($this->children)) {

    $data["children"] = $this->children;

  }


  return $data;

}


查看完整回答
反对 回复 2023-06-24
  • 1 回答
  • 0 关注
  • 104 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信