Добавление вложенных потомков внутри родителя и вложение должно быть равно количеству элементов в массиве - PullRequest
0 голосов
/ 16 июня 2019

Мне нужно создать вложенный массив родительских и дочерних элементов. По сути, у меня есть список, как показано ниже.

$changeLog = array(
    array("data1" => "value1"),
    array("data2" => "value2"),
    array("data3" => "value3")
)

Для каждого значения $changeLog мне нужно добавить вложенный дочерний элемент в массив. Так, например, у меня есть 3 значения в changeLog ожидаемый результат должен быть следующим:

$finalResult = array(
        "parent1" => "value1",
        "child" => array(
           "parent2" => "value2",
           "child" => array(
                 "parent3" => "value3",
                 "child" => array(
                      "parent4" => "value4"
                  )
           )
        )
    )

Итак, короче говоря, для каждого значения (которое в основном является массивом, я должен извлечь некоторые значения из этого массива, который будет использоваться во вложенном дочернем элементе) в $changeLog будет добавлен вложенный дочерний элемент. Я пытался сделать это с помощью рекурсии и цикла for тоже. Но я совершенно заблудился, как поступить с этим. Кто-нибудь может дать мне подсказку, как мы можем этого достичь?

1 Ответ

0 голосов
/ 16 июня 2019

Мне нравится, чтобы структура данных была максимально простой.Также работать с большими вложенными массивами всегда сложно.

Я бы предложил изменить формат переменной $ finalResult на следующий (используя некую древовидную структуру без многомерного массива):

$finalResult = [
    "1" => "value1",
    "1.2" => "value2",
    "1.2.3" => "value3",
    "1.2.3.4" => "value4"
];

В этом случае ключ массива «1» является уникальным идентификатором, а путь к родительскому элементу 1.

Ключ массива «1.2» является уникальным путем к родительскому файлу 2, «2» - это идентификатор родительского объекта 2.

массивключ «1.2.3» - это уникальный путь родителя3, «3» - это идентификатор родителя 3.

Ключ массива «1.2.3.4» - это уникальный путь родителя4, «4» - это идентификатор родителя4.

и так далее ...

В этом случае вы можете просто обращаться к элементам, вы можете сортировать массив по ключам.

И f.ex.Ключ массива "1.2.3.4" показывает, что это parent4 с идентификатором "4" и он является потомком родителей с идентификаторами "1", "2" и "3"

В ключе массива "1.2.3.4"последнее число после последней точки является уникальным идентификатором, все до последней точки показывают идентификаторы всех родителей.

...