2014-04-03 68 views
0

我有以下的結構,我不知道如何映射它(我不知道如果「地圖」是真的是我還需要:S)地圖多維數組 - PHP

var -> child1 -> subchild1 
       -> subchild2 -> subsubchild1 

    -> child2 -> subchild3 

所以,我需要圖/解析它的東西是這樣的:

 var.child1.subchild1 
    var.child1.subchild2.subsubchild1 
    var.child2.subchild1 

我能做到它到第2級:

 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>"; 
} 

您有什麼想法嗎?

謝謝!

回答

2

我甚至無法想象爲什麼你需要這個,但你應該使用遞歸,就像這樣:

<?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)); 
?> 

給出:

Array 
(
    [0] => var.child1.subchild1 
    [1] => var.child1.subchild2.subsubchild1 
    [2] => var.child1.subchild2.subsubchild2 
    [3] => var.child2.subchild1 
) 
+0

謝謝!我不得不做一些改變,但它的工作。它是一個mongodb查詢,來檢查字段是否存在:find('var.child1.subchild1':{'$ exists':true}); – leojg