【问题标题】:How to add item to an object in php如何在php中将项目添加到对象
【发布时间】:2021-07-25 10:45:04
【问题描述】:

我有一个嵌套对象,它由function 中的基础数据生成。生成的数据有几个levels深(data_tree)

要输入每个children,我使用recursive function

我想要的是addchildren2项的数据到childrenremove children2

接下来我以JSON 格式展示data_tree,以了解structure 是如何的。请记住,data_tree 是 object

{ 
"data_tree": [
                        {
                            "code":"PE",
                            "country":"Peruvian",
                            "language" :"spanish",
                            "children":[
                                {
                                    "code": "DEP1" , 
                                    "region":"Tumbes",
                                    "children": [
                                        {
                                            "code": "PRO1",
                                            "province":"Contralmirante Villar"
                                        }
                                    ],
                                    "children2": [
                                        {
                                            "code": "PRO2",
                                            "province":"Zarumilla "
                                        }
                                    ]
                                },
                                {
                                    "code": "DEP2" ,
                                    "region":"Piura",
                                    "children": [],
                                    "children2": [
                                        {
                                            "code": "PRO4",
                                            "province" :"Paita"
                                        },
                                        {
                                            "code": "PRO5",
                                            "province":"Sullana"
                                        }
                                    ]
                                    
                                },
                                {
                                    "code": "DEP3" ,
                                    "region":"Lambayeque"
                                }
                    
                            ],
                            "children2":[
                                {
                                    "code": "DEP4" ,
                                    "region":"La Libertad"
                                    
                                },
                                {
                                    "code": "DEP5" ,
                                    "region":"Lima"
                                    
                                }
                            ]
                        },
                        {
                "code":"EC"
                            "country":"Ecuador",
                            "language" :"spanish",
                            "children":[
                                {
                                    "code": "4" ,
                                    "province":"Quito"
                                },
                                {
                                    "code": "5" ,
                                    "province":"Guayaquil"
                                }
                            ],
                            "children2":[]
                        }
                    ]
}

我使用的recursive function 是:如果它有孩子,它会不断迭代。

$traverse = function ($data_tree) use (&$traverse) {
    
                    foreach ($data_tree as &$node) { 
                        if (empty($node->children)) { //if the children is empty
                            unset($node->children); //I remove the children to add it with the data of children2
                            $node->children =$node->children2; 
                            unset($node->children2);//I delete children2
                        }else{

                           //in case I have data, how do I add the data from dechildren2 to children?
                            
                        }   

                        $traverse($node->children);
                    }
                };
    
$traverse($data_tree);
    
return $data_tree;

【问题讨论】:

    标签: php object php-7


    【解决方案1】:

    使用关联数组中的 json 解码均值解决所有问题

    $data_json='[{"children":[],"children2":[{"children":[],"children2":[{"code":"PRO1","children":[],"children2":[{"code":"PRO1"}]}]}]},{"children":[],"children2":[{"children":[{"code":"PRO1","children":[],"children2":[{"code":"PRO1"}]}]}]}]';
    
    
    //$data_tree=;
    
    $data_tree =json_decode($data_json,true);
    // var_dump($data_tree);
    $traverse = function (&$data_tree) use (&$traverse) {
        
      foreach ($data_tree as &$node) { 
        // var_dump($node);
          if (empty($node['children']) && !empty($node['children2'])) { //if the children is empty
            // var_dump($node);
              $node['children'] =$node['children2']; 
              unset($node['children2']);//I delete children2
          }else{
    
             //in case I have data, how do I add the data from dechildren2 to children?
              
          }   
          if(isset($node['children'])){
            $traverse($node['children']);
          } 
          if(isset($node['children2'])){
            $traverse($node['children2']);
          }
      }
    };
    
    $traverse($data_tree);
    

    输出

    [{"children":[{"children":[{"code":"PRO1","children":[{"code":"PRO1"}]}]}]},{"children":[{"children":[{"code":"PRO1","children":[{"code":"PRO1"}]}]}]}]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 2018-11-16
      相关资源
      最近更新 更多