【问题标题】:PHP push values to nested arrayPHP将值推送到嵌套数组
【发布时间】:2019-06-06 02:38:04
【问题描述】:

我在 php 中创建了以下对象数组

$treeData[] = (object) array(
    "name"=> "A",
    "children" => [
        [
            "name"=> "A1", 
            "children"=> [ 
                [ 
                    "name"=> "A1.1",
                    "children"=> [ 
                        [
                            "name"=> "A1.1.1",
                            "children"=> [ 
                                ....

我正在尝试根据以下条件在 A1.1.1 的子项中推送新值:

foreach ($treeData as $value) {
    if ($value->name == 'A') {
        $value->name[][] = (object) array(
                                           "name"=> "ChildA", 
                                           "children"=> ""
                                    );
        break;
    }
}

但它给了我一个错误

预期结果应与以下示例匹配:

$treeData[] = (object) array(
    "name"=> "A",
    "children" => [
        [
            "name"=> "A1",
            "children"=> [ [
                "name"=> "A1.1",
                "children"=> [ [
                    "name"=> "A1.1.1",
                    "children"=> [ 
                        [
                            "name"=> "ChildA",
                            "children"=> [ [ 
                                "name"=> "ChildA1"
                            ] ]
                        ],
                        [
                            "name"=> "ChildA",
                            "children"=> [ [
                                "name"=> "ChildA2"
                            ] ]
                        ],
                    ]
                ] ]
            ] ]
        ]
   ]);   

我在这里做错了什么或以不同的方式实现这一目标的任何方式

我得到的错误:

“致命错误:未捕获的错误:字符串不支持 [] 运算符”

【问题讨论】:

  • 您能否添加您遇到的错误,以便更全面地了解其执行情况? :)
  • 我添加了错误
  • 我认为您正在尝试将数组强制为字符串的对象属性。如果我没记错的话,你不想把它推到$value->name,而是推到$value->children
  • 好的让我试试
  • @DiogoSanto 如果我想访问“name”=>“A1.1.1”中的孩子我应该怎么做?我已经写了以下 foreach 循环,但给了我错误 $testresult = []; foreach ($treeData as $value) { if($value->name == 'A'){ $testresult = $value->children->name; } }

标签: php arrays object


【解决方案1】:

首先你得到错误:$value->name[][]。请注意,名称是一个字符串,因此您不能在其上使用[](数组附加运算符)。

如果我是你,我会采用递归方法。考虑以下伪代码:

function addChild($root, $addToName, $nameToAdd) {
    if ($root->name == $addToName)
        $root->children[] =  (object) array("name"=> $nameToAdd, "children"=> []);
    else 
        foreach($root->children as $child)
            addChild($child, $addToName, $nameToAdd);
}  

现在电话是:addChild($treeData, 'A', "ChildA")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多