Page 1 sur 1

Creation d'un tableau multidimentionnel

Posté : 20 févr. 2009, 00:55
par Kizmo
Bonjour a tous,

j'aimerai transformer un tableau "simple" :
$tab = array("un","deux","trois");
$val = "quatre";
en un tableau multidimentionnel dont les valeurs de $tab seraient les index
$tab_multi["un"]["deux"]["trois"] = "quatre";
la difficulté vient du fait que l'on ne connait pas les valeur de $tab ni meme la longueur

Une idée?

Posté : 20 févr. 2009, 12:21
par sadeq
L'idée est d'utiliser un pointeur (référence directe à une variable) pour pouvoir construire un nouveau tableau à index hiérarchisé. Le pointeur servira à mémoriser la position où l'on va créer un
nouvel index. Et à chaque fois un nouvel index est créé, le pointeur doit être replacé sur cet index. Et ainsi de suite, ... on construit ainsi un arbre à une branche hiérarchisée.
Voici comment:
<pre>
<?php 
// source des index sous forme de tableau
$tab = array("un","deux","trois");

// nouveau tableau à créer dont les index sont dans $tab 
$nouv_tab = array();

// puisque les index sont séquentiels on a besoin d'un pointeur (mémoire de position)
// qui permet de mémoriser la position de l'avancement de la création des index
$pointeur_index = &$nouv_tab;

// parcourir $tab pour lire les index et les créer dans le pointeur
foreach($tab as $valeur){
	// création de l'index dans la position en cours
	$pointeur_index[$valeur] = array();
	
	// changer la position du pointeur vers l'index créé
	$pointeur_index = &$pointeur_index[$valeur];
}

// à la fin mettre la valeur dans le dernier index pointé
$pointeur_index = "quatre";

// afficher le résultat
print_r($nouv_tab);
?>
</pre>

Posté : 21 févr. 2009, 12:51
par Invité
Merci bcp!

Posté : 24 févr. 2009, 15:02
par Hywan
Hey :-),

Avec du retard, je m'excuse, mais c'est une autre solution intéressante (celle de Sadeq est très bien hein, j'aurais fait pareil, mais je veux montrer qu'il y a une façon de faire plus triviale).

On va dépiler les éléments de la fin pour créer des tableaux successifs :
<?php

$a   = array('one', 'two', 'three');
$out = null;

while(null !== $pop = array_pop($a))
    $out = array($pop => $out);

print_r($out);
Affichera :

Code : Tout sélectionner

Array ( [one] => Array ( [two] => Array ( [three] => ) ) )
On l'aura pressenti, la valeur que tu veux ajouter au bout est tout simplement la valeur par défaut de la variable $out :-).

Posté : 24 févr. 2009, 22:36
par sadeq
ok :pouce: