2017-10-02 2 views
0

Comment obtenir la liste tout tableau multidimensionnel avec l'index parent. Tout l'index dans chaque niveau est unique et je veux montrer toute la liste avec le niveau.Comment obtenir la liste tout tableau multidimensionnel avec l'index parent

exemple mes tableaux:

Array(
[1] => Array(
     [2] => Array(
       [3] => 
       [4] => 
       [7] => 
      ) 
    ) 

[6] => Array(
     [11] => Array(
       [12] => Array(
         [17] => 
         ) 
      ) 
    ) 

[2] => Array(
     [13] => Array(
       [14] => 
      ) 

    ) 
) 

Je veux obtenir une sortie comme ceci:

Array 
(
[1]=array([level] = 1) 
[2]=array([level] = 2) 
[3]=array([level] = 3) 
[4]=array([level] = 3) 
[7]=array([level] = 3) 
[6]=array([level] = 1) 
[11]=array([level] = 2) 
[12]=array([level] = 3) 
[17]=array([level] = 4) 
... 
) 
+0

un coup d'oeil à https://stackoverflow.com/questions/21516892/flatten-a-multdimensional-tree-array-in-php – Cobolt

+0

@cobolt i essayé mais ne fonctionne pas, parce que j'ai besoin d'obtenir le niveau aussi. –

+0

@MuhammadDyasYaskur, quel est l'avantage d'une telle structure de sortie '[1] = array ([niveau] = 1)'? Il est évident qu'un élément peut n'occuper qu'un seul niveau, à quoi sert le tableau imbriqué '['level' => ...]'? J'ai une solution de travail et je suggère de sortie soit de manière chaîne comme 'valeur: 1, niveau: 1,' OU dans un tableau 2d comme '['value' => 1, 'level' => 1], [ 'value' => 3, 'level' => 3] ' – RomanPerekhrest

Répondre

0

Voici une solution en utilisant une fonction recursive. En supposant que votre array aura une valeur NULL s'il n'y a plus de tableaux enfants/imbriqués.

$arr = array(1 => array(2 => array(3 => NULL, 
             4 => NULL, 
             7 => NULL)), 
      6 => array(11 => array(12 => array(17 =>NULL))), 
      2 => array(13 => array(14 => NULL))); 

$rslt_arr = array(); 

function traverse_arr($array, $level) 
{ 
    $level++; 
    foreach ($array as $key => $value){ 
     if($value != NULL){ 
      traverse_arr($value, $level); 
     } 
     $GLOBALS['rslt_arr'][$key]['level'] = $level; 
    } 
} 

traverse_arr($arr, 0); 

echo '<pre>'; 
print_r($rslt_arr); 

SORTIE:

Array 
(
    [3] => Array 
     (
      [level] => 3 
     ) 

    [4] => Array 
     (
      [level] => 3 
     ) 

    [7] => Array 
     (
      [level] => 3 
     ) 

    [2] => Array 
     (
      [level] => 1 
     ) 

    [1] => Array 
     (
      [level] => 1 
     ) 

    [17] => Array 
     (
      [level] => 4 
     ) 

    [12] => Array 
     (
      [level] => 3 
     ) 

    [11] => Array 
     (
      [level] => 2 
     ) 

    [6] => Array 
     (
      [level] => 1 
     ) 

    [14] => Array 
     (
      [level] => 3 
     ) 

    [13] => Array 
     (
      [level] => 2 
     ) 

)