将多维嵌套PHP数组重塑为其他格式

将多维嵌套PHP数组重塑为其他格式,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个多维嵌套数组: $arr = array( 'name' => 'Root Node', 'children' => array( array( 'name' => 'Node A', 'children' => array( array( 'name' => 'Node A

我有一个多维嵌套数组:

$arr = array(
    'name'      => 'Root Node',
    'children'  => array(
        array(
            'name'      => 'Node A',
            'children'  => array(
                array(
                    'name'      => 'Node A.1',
                    'children'  => array(
                        array(
                            'name'      => 'Node A.1.1',
                            'children'  => ''
                        ),
                    ),
                ),

                array(
                    'name'      => 'Node A.2',
                    'children'  => ''
                ),
            ),
        ),

        array(
            'name'      => 'Node B',
            'children'  => array(
                array(
                    'name'      => 'Node B.1',
                    'children'  => '',
                ),

                array(
                    'name'      => 'Node B.2',
                    'children'  => ''
                ),
            )
        ),

        array(
            'name'      => 'Node C',
            'children'  => ''
        )
    ),
);
目前该阵列最多有4个级别,但我们不能假设其深度级别静态为4,因为它可能也有N个级别。我的目标是使用每个关系的单个行数组转换此数组,如:

$arr = array(
    array( 'Root Node', 'Nodel A', 'Node A.1', 'Node A.1.1' ),
    array( 'Root Node', 'Nodel A', 'Node A.2' ),
    array( 'Root Node', 'Nodel B', 'Node B.1' ),
    array( 'Root Node', 'Nodel B', 'Node B.2' ),
    array( 'Root Node', 'Nodel C' ),
);

我知道递归函数应该可以做到这一点,但我无法理解,因为它并不像我在开始时想象的那么容易。任何帮助都将不胜感激

按照以下协议获取您指定的元素

$name0=$arr['name'];
$in1=$arr['children'];
foreach($in1 as $key=>$value)
{
echo $name0.", ";
echo $name1=$in1[$key]['name'].", ";
$in2=$arr['children'][$key]['children'];
    foreach($in2 as $k2=>$v2)
    {
        echo $name2=$in2[$k2]['name'].", ";
        $in3=$arr['children'][$key]['children'][$k2]['children'];
        foreach($in3 as $k3=>$v3)
        {
           echo  $name3=$in3[$k3]['name'].", ";
        }
    }
    echo "</br>";
}
$name0=$arr['name'];
$in1=$arr['children'];
foreach($in1作为$key=>$value)
{
echo$name0。“,”;
echo$name1=$in1[$key]['name']。“,”;
$in2=$arr['children'][$key]['children'];
foreach($in2为$k2=>$v2)
{
echo$name2=$in2[$k2]['name']。“,”;
$in3=$arr['children'][$key]['children'][$k2]['children'];
foreach($in3为$k3=>$v3)
{
echo$name3=$in3[$k3]['name']。“,”;
}
}
回声“
”; }
输出:-

根节点,节点A,节点A.1,节点A.1.1,节点A.2

根节点,节点B,节点B.1,节点B.2

根节点,节点C


使用以下代码段。它应该能解决你的问题

function makeTreeArr($arr){ 
    $mainarr = []; 
    $tmparr = []; 
    function iterateChildren(&$mainarr,&$tmparr,$node){ 
        $tmparr[] = $node['name']; 
        if(is_array($node['children'])){ 
            foreach($node['children'] as $child){ 
                iterateChildren($mainarr,$tmparr,$child) ;     
            } 
        }else{ 
            $mainarr[] = $tmparr; 
        } 
        array_pop($tmparr ); 
    } 
   iterateChildren($mainarr,$tmparr,$arr); 
   return $mainarr; 
} 
$newarr = makeTreeArr($arr); 

你试过什么吗?用foreach进入所有元素。在foreach内部,将值放在表上我尝试了foreach和递归函数使其工作,但无法理解。感谢您的尝试。查看代码片段,它似乎仅限于三个级别,我需要它接受任意数量的级别。这是指定的4个级别。在脚本静态之前,3或4个级别都无关紧要。对于100个深度级别,我们不能重复foreach直到100次。它有效!非常感谢你的努力。。然而,我将函数进一步缩短为:
function iterateChildren($node,$mainarr,$tmparr){$tmparr[]=$node['name'];if(is_array($node['children']){foreach($node['children']as$child){$mainarr iterachildren($child,$mainarr,$tmparr);}否则{$mainarr[]=$tmparr[]=$tmparr;}数组}($tmparr);返回$mainarr;}