在 foreach 循环中创建数组,其中包含来自另一个循环的子项

基于存储在变量中的 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 循环来获取子属性并将它们存储在循环中当前元素的数组中。我确实使用了这样的代码,但是创建了一个新节点并且它没有存储在父节点中。


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(),

            ))

        );

    }


}

我相信解决方案很简单,但我无法独自解决......


谢谢您的支持。


守着一只汪
浏览 108回答 3
3回答

斯蒂芬大帝

建立新的数组数据并将其添加到最后而不是每个阶段的主数组中会更容易......$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;}

长风秋雁

用于创建数组的父循环的用户索引。$MyObject[$var] = array(        "title"  => $value->SequenceName->__toString(),        "folder" => true    );$MyObject[$var]['children'][] = array(array(                "title" => $b->PackageFolder->__toString(),            ));

慕桂英546537

你需要做一些这样的事情。您需要使用父数组中的键并插入新值子 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(),    );}}
打开App,查看更多内容
随时随地看视频慕课网APP