2012-10-03 54 views
0

我能夠遍歷多維數組,但我也需要關於依賴關係的信息。這是我想要做的。我有一個這樣的數組:PHP找到多維數組的依賴關係

array(
    'top1' => 'sth', 
    'top2' => array(
     'sub1' => 'sth', 
     'sub2' => array(
      'line1' => 'sth', 
      'line2' => 'sth' 
     ) 
    ) 
    'top3' => 'sth' 
) 

我能夠遍歷數組把所有的鑰匙,結果是這樣的:

array([0] => 'top1', [1] => 'top2', [2] => 'sub1', [3] => 'sub2', ...) 

不過,我需要知道當前元素的父。所以我希望我能得到這樣的東西:

array(
    [top1] => array('parent' => 0, 'id' => 1), 
    [top2] => array('parent' => 0, 'id' => 2), 
    [sub1] => array('parent' => 2, 'id' => 2.1), 
    [sub2] => array('parent' => 2, 'id' => 2.2), 
    [line1] => array('parent' => 2.2, 'id' => 2.2.1), 
    ... 
    [top3] => array('parent' => 0, 'id' => 3) 
) 

我一直在嘗試很多方法,但不能總是得到正確的結果。有誰能解決這個問題嗎?謝謝!

+0

工作的例子什麼是你的代碼,以獲得平坦的陣列? – Sven

回答

1

這裏是你

function traverse(array $input, $parent = null) { 

    $result = array(); 
    $current = 1; 
    foreach ($input as $key => $value) { 

     $id = null !== $parent ? $parent . '.' . $current : $current; 
     $result[$key] = array('parent' => null !== $parent ? $parent : 0, 'id' => $id); 
     if (is_array($value)) { 

      $result = array_merge($result, traverse($value, $id)); 
     } 

     $current++; 
    } 

    return $result; 
} 

$input = array(
    'top1' => 'sth', 
    'top2' => array(
     'sub1' => 'sth', 
     'sub2' => array(
      'line1' => 'sth', 
      'line2' => 'sth' 
     ) 
    ), 
    'top3' => 'sth' 
); 

echo '<pre>'; 
print_r($input); 
echo '<hr>'; 
print_r(traverse($input)); 
echo '</pre>';