在foreach循环内用另一个循环的子级创建数组

时间:2019-12-14 07:24:09

标签: php

基于来自存储在变量$Xml中的XML文件的数据,我想创建一个具有自定义属性的新数组。

我确实是从一个foreach循环开始的:

foreach($Xml->Sequences->Sequence as $var=>$value) {

    $MyObject[] = array(
        "title"  => $value->SequenceName->__toString(),
        "folder" => true
    );

}

没关系。结果看起来像这样:

Array
(
    [0] => Array
        (
            [title] => Folder1
            [folder] => 1
        )

    [1] => Array
        (
            [title] => Folder2
            [folder] => 1
        )
)

变量$Xml还包含子属性,我需要将它们插入新数组中。
理想的结果将是:

Array
(
    [0] => Array
        (
            [title] => Folder1
            [folder] => 1
            [children] => Array
                (
                    [0] => Array
                        (
                            [title] => Package1
                        )

                )

        )
)

我不知道如何得到这个结果!
我认为,我需要启动另一个foreach循环来获取子属性,并将其存储在循环中当前元素的数组中。我确实使用过这样的代码,但是off创建了一个新节点,它没有存储在父节点中。

foreach($Xml->Sequences->Sequence as $var=>$value) {

    $MyObject[] = array(
        "title"  => $value->SequenceName->__toString(),
        "folder" => true,
    );

    foreach ($value->SequencePackages->Package as $a=>$b){
        $MyObject[] = array(
            "children" => array(array(
                "title" => $b->PackageFolder->__toString(),
            ))
        );
    }

}

我相信解决方案很简单,但我不能一个人解决...

感谢您的支持。

3 个答案:

答案 0 :(得分:0)

您需要执行以下操作。您需要使用父数组中的键并插入新值子级 foreach($ Xml-> Sequences-> Sequence as $ var => $ value){

$MyObject[] = array(
    "title"  => $value->SequenceName->__toString(),
    "folder" => true,
);

foreach ($value->SequencePackages->Package as $a=>$b){
    $MyObject[‘children’] = array(
            "title" => $b->PackageFolder->__toString(),

    );
}

}

答案 1 :(得分:0)

父循环的用户索引以创建数组。

$MyObject[$var] = array(
        "title"  => $value->SequenceName->__toString(),
        "folder" => true
    );

$MyObject[$var]['children'][] = array(array(
                "title" => $b->PackageFolder->__toString(),
            ));

答案 2 :(得分:0)

建立新的数组数据并将其添加到主数组的末尾而不是在每个阶段都比较容易...

$MyObject = [];
foreach($Xml->Sequences->Sequence as $var=>$value) {
    $newObject =array(
        "title"  => $value->SequenceName->__toString(),
        "folder" => true,
    );

    foreach ($value->SequencePackages->Package as $a=>$b){
        $newObject["children"][] = ["title" => $b->PackageFolder->__toString()];
    }
    $MyObject[] = $newObject;
}