Creation d'un tableau multidimentionnel

Petit nouveau ! | 1 Messages

20 févr. 2009, 00:55

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?

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

20 févr. 2009, 12:21

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>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Invité
Invité n'ayant pas de compte PHPfrance

21 févr. 2009, 12:51

Merci bcp!

ViPHP
ViPHP | 4674 Messages

24 févr. 2009, 15:02

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 :-).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

24 févr. 2009, 22:36

ok :pouce:
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène