Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
映射多维数组-PHP_Php_Arrays_Multidimensional Array - Fatal编程技术网

映射多维数组-PHP

映射多维数组-PHP,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有以下结构,我不知道如何映射它(我不知道“map”是否也是我真正需要的:S) 因此,我需要将其映射/解析为如下内容: var.child1.subchild1 var.child1.subchild2.subsubchild1 var.child2.subchild1 <?php $test_arr = array('name'=>'var','childs'=> array( array( 'n

我有以下结构,我不知道如何映射它(我不知道“map”是否也是我真正需要的:S)

因此,我需要将其映射/解析为如下内容:

     var.child1.subchild1
     var.child1.subchild2.subsubchild1
     var.child2.subchild1
<?php
$test_arr = array('name'=>'var','childs'=>
    array(
        array(
            'name'=>'child1',
            'childs'=>array(
                'subchild1',
                array(
                    'name' => 'subchild2',
                    'childs' => array(
                        'subsubchild1',
                        'subsubchild2'
                    )
                )
            )
        ),
        array(
            'name'=>'child2',
            'childs'=> array('subchild1')
        )
    )
);

function map($arr) {
    if(is_array($arr) && isset($arr['childs']) && $arr['childs']) {
        $result = array();
        foreach($arr['childs'] as $child) {
            foreach(map($child) as $child2) $result[] = $arr['name'].".".$child2;
        }
        return $result;
    }
    else return array($arr);
}

print_r(map($test_arr));
?>
我设法做到了第二级:

     var.child1.subchild1
     var.child1.subchild2
这是密码

function foo($a,$txt) {
    if (isset($a['childs'])) {
        foreach ($a['childs'] as $ch) {
            $txt .= foo($ch,$txt);
        }
    } else {
        $txt .= ".".$a['name'];
    }
    return $txt;
}

foreach ($arr as $childs) {
    $aux = $r;
    var_dump(foo($childs,$aux));
    echo "<br>";
}
函数foo($a,$txt){ 如果(isset($a['childs'])){ foreach($a['childs']作为$ch){ $txt.=foo($ch,$txt); } }否则{ $txt.=“..$a['name']; } 返回$txt; } foreach($arr as$childs){ $aux=$r; 变量转储(foo($childs,$aux)); 回声“
”; } 你有什么想法吗


谢谢

我甚至无法想象你为什么需要这个,但你应该使用递归,就像这样:

     var.child1.subchild1
     var.child1.subchild2.subsubchild1
     var.child2.subchild1
<?php
$test_arr = array('name'=>'var','childs'=>
    array(
        array(
            'name'=>'child1',
            'childs'=>array(
                'subchild1',
                array(
                    'name' => 'subchild2',
                    'childs' => array(
                        'subsubchild1',
                        'subsubchild2'
                    )
                )
            )
        ),
        array(
            'name'=>'child2',
            'childs'=> array('subchild1')
        )
    )
);

function map($arr) {
    if(is_array($arr) && isset($arr['childs']) && $arr['childs']) {
        $result = array();
        foreach($arr['childs'] as $child) {
            foreach(map($child) as $child2) $result[] = $arr['name'].".".$child2;
        }
        return $result;
    }
    else return array($arr);
}

print_r(map($test_arr));
?>

谢谢我不得不做一些改变,但它奏效了。它用于mongodb查询,以检查字段是否存在:find('var.child1.subchild1':{'$exists':true});