PHP выдвигает значения во вложенный массив - PullRequest
3 голосов
/ 06 июня 2019

у меня есть созданный следующий массив объектов в 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"
                            ] ]
                        ],
                    ]
                ] ]
            ] ]
        ]
   ]);   

Что я делаю не так здесь или как-то иначе добиться этого другим подходом

Я получаю ошибку:

"Неустранимая ошибка: необработанная ошибка: оператор [] не поддерживается для строк"

1 Ответ

2 голосов
/ 06 июня 2019

Прежде всего вы получаете сообщение об ошибке: $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")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...