2010-12-01 3 views
1

J'ai la nouvelle gamme d'arbres:php obtenir des niveaux de tableau dans la récursion

$arr = 
array(
'id' => 1431, 
'children' => array(
    1432 => array(
    'id' => 1432, 
    'children' => array(
    1433 => array(
    'id' => 1433, 
    'children' => array(), 
    ), 
    1434 => array(
    'id' => 1434, 
    'children' => array(), 
    ), 
    ) 
), 
    1435 => array(), 
    'id' => 1435, 
    'children' => array(
    1436 => array(
    'id' => 1436, 
    'children' => array(
     1437 => array(
     'id' => 1437, 
     'children' => array(), 
    ), 
     1438 => array(
     'id' => 1438, 
     'children' => array(), 
    ), 
     1439 => array(
     'id' => 1439, 
     'children' => array(), 
    ), 
    ), 
    ), 
    ), 
), 
); 

Ma tâche pour obtenir tableau générations de ce tableau. Ma sortie devrait être la suivante:

Array(
[1] = Array(
    [1432] = ... 
    [1435] = ... 
), 
[2] = Array(
    [1433] = ... 
    [1434] = ... 
    [1436] = ... 
), 
[3] = Array(
    [1437] = ... 
    [1438] = ... 
    [1439] = ... 
), 
) 

Mais maintenant ma sortie l'autre (sans élément 1346):

Array(
[1] = Array(
    [1432] = ... 
    [1435] = ... 
), 
[2] = Array(
    [1433] = ... 
    [1434] = ... 
), 
[3] = Array(
    [1437] = ... 
    [1438] = ... 
    [1439] = ... 
), 
) 

Qu'est-ce qui ne va pas dans ma fonction?

public function getGenerations($userTree, $currGeneration = 0, $result = array()) 
{ 
    print_r($userTree); 
    $currGeneration++; 
    if (!empty($userTree) && !empty($userTree['children'])) { 
     foreach($userTree['children'] as $k => $v) { 
      $currUser = $v; 
      unset($currUser['children']); 
      $result[$currGeneration][$k] = $currUser; 
      $result += $this->getGenerations($v, $currGeneration, $result); 
     } 
    } 
    return $result; 
} 

J'appelle cette fonction comme ceci: $res = getGenerations($arr); Nous vous remercions à l'avance. Désolé pour mon anglais.

Répondre

2

Vous pouvez passer le tableau de résultat comme reference au lieu de retourner puis rejoindre avec le tableau de résultat local:

public function getGenerations($userTree, $currGeneration = 0, &$result = array()) 
{ 
    print_r($userTree); 
    $currGeneration++; 
    if (!empty($userTree) && !empty($userTree['children'])) { 
     foreach($userTree['children'] as $k => $v) { 
      $currUser = $v; 
      unset($currUser['children']); 
      $result[$currGeneration][$k] = $currUser; 
      $this->getGenerations($v, $currGeneration, $result); 
     } 
    } 
    return $result; 
} 
+0

Merci. C'est une bonne réponse. – pltvs

Questions connexes