2012-09-18 8 views
0

Travailler sur quelque chose et ne peut pas trouver une solution simple à ce problème sans boucler simplement le tableau avec un foreach. Quelqu'un at-il une solution simple pour ceTransforme un tableau plat en tableau imbriqué

Je veux tourner cette

&array(4) { 
["a"]=>int(0) 
["b"]=>int(1) 
["c"]=>int(2) 
["d"]=>int(3) 
} 

Dans cette

array(1) { 
    ["a"]=> 
    array(1) { 
    [0]=> 
    array(1) { 
     ["b"]=> 
     array(1) { 
     [0]=> 
     array(1) { 
      ["c"]=> 
      array(1) { 
      [0]=> 
      array(1) { 
       ["d"]=> int(1) //this value does not matter 
      } 
      } 
     } 
     } 
    } 
    } 
} 

Les valeurs ne comptent pas du tout ce que je juste besoin des clés pour exécuter contre un fonction array_intersect_key_recursive que j'ai.

EDIT: le tableau a changé après l'avoir testé doit être imbriquée comme un tableau d'un tableau

+1

Pourquoi '' d' ont int (1) '? –

+0

parce que quand j'ai construit le tableau de résultats, je voulais que j'utilise 1 comme valeur. Ce n'est vraiment pas important de savoir quelle est la valeur. Je vais passer à int (3) pour le rendre plus clair – Mike

Répondre

1

Je ne sais pas comment cela pourrait finir par vous aider, mais il était néanmoins exercice amusant.

$newArray = array(); 
$last = &$newArray; 
$array = array_reverse(array_keys($array)); 
while ($item = array_pop($array)) { 
    if (!is_array($last)) { 
     $last = array(); 
    } 
    $last[$item] = array(array()); 
    $last = &$last[$item][0]; 
} 

REMARQUE: J'ai effectué cette réponse avec int(1). Vous avez dit que la valeur n'est pas importante, donc je ne vais pas la changer pour l'instant, mais vous devriez faire un peu plus de travail si la valeur était importante (probablement quelque chose comme la valeur du tableau original avec $item comme clé).

0

Une autre approche utilisant récursion:

function toNestedArray(array $array, $index = 0) { 
    $return = array(); 
    if ($index < count($array)) { 
     $return[$array[$index]] = toNestedArray($array, ++$index); 
    } 
    return $return; 
} 

Exemple d'utilisation:

$flatArray = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4); 
$nestedArray = toNestedArray(array_keys($flatArray)); 
print_r($nestedArray); 

Sortie:

Array 
(
    [a] => Array 
     (
      [b] => Array 
       (
        [c] => Array 
         (
          [d] => Array 
           (
           ) 

         ) 

       ) 

     ) 

) 
Questions connexes