2017-06-09 48 views
0

我有傳入POST陣列:如何在PHP中構建樹?

$parameters = array("1" , "2" , "3", "4", "5"); 
$parents = array("null" , "1" , "1", "3", "3"); 
$values = array("A" , "B" , "C", "D", "E"); 

$parameters的數量是不受限制的。

所以,我需要建立一個嵌套參數的樹。

輸出的結果應該是:

1 -> {2 => value, 3 -> {4 => value, 5 => value}} 

我嘗試使用以下循環:

foreach ($parameters["parameters"] as $index => $id) { 
    if(!is_null($parameters["parents"][$index])){ 
     $output[$parameters["parents"][$index]][] = $id; 
    } 
} 

但它僅適用於一級棵樹的水平,我想我需要使用遞歸的方法。

+1

什麼這是你的邏輯\ –

回答

0

您可以使用迭代方法,將根元素的引用保留在array() $refs中。
這裏的代碼錯過了有孩子的元素的值 - 這是您的要求 - 但您可以在結果array中使用顯式鍵保留它 - 例如value => ..., children => array()

$parameters = array('1', '2', '3', '4', '5'); 
$parents = array('null', '1', '1', '3', '3'); 
$values = array( 'A', 'B', 'C', 'D', 'E'); 

$tree = array(); 
$refs = array(); 
foreach ($parameters as $key=>$val) { 
    if (isset($refs[$parents[$key]])) { 
     if(!is_array($refs[$parents[$key]])) 
      $refs[$parents[$key]] = array(); 
     $refs[$parents[$key]][$val] = $values[$key]; 
     $refs[$val] = &$refs[$parents[$key]][$val]; 
    } else { 
     $tree[$val] = $values[$key]; 
     $refs[$val] = &$tree[$val]; 
    } 
} 

print_r($tree); 

上面會打印:

Array 
(
    [1] => Array 
     (
      [2] => B 
      [3] => Array 
       (
        [4] => D 
        [5] => E 
       ) 
     ) 
)