tableau multi multi dimensionnel

Petit nouveau ! | 7 Messages

09 févr. 2009, 17:26

alors voila, je pose une question un peu bête, mais je voulais savoir combien de dimension dans un tableau on pouvait créer.

est ce que par exemple on peut créer un tableau du genre:

$tab{$ref_quelquechose][$machin][$unautre_truc][$i] ($i étant un indice)


en faite je pense que l'on peut on construire un, car je l'ai fait mais c'est plus son utilisation qui m'a posé des problèmes...

pouvez vous me dire comment faire?

j'ai utilisé plusieurs boucle foreach imbriqué, c'était complètement foireux xD
merci d'avance :)

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

09 févr. 2009, 21:08

Oui, on peut. Les dimensions qu'on peut nommer sont "illimitées". Et pour l'usage de foreach c'est normal, tu dois utiliser autant de foreach que d'index nommé dans ton tableau. Enfin, si tu connais les indexes, tu peux faire un accès direct.

Voici un exemple:
// Un tableau représentant une BD
$base_de_données["formation"]["cours"]["programmation"]["php"][1]["titre"] = "Installation et configuration de PHP5/Apache/IIS";
$base_de_données["formation"]["cours"]["programmation"]["php"][1]["durée"] = "2H";

$base_de_données["formation"]["cours"]["programmation"]["php"][2]["titre"] = "Initiation au langage PHP5";
$base_de_données["formation"]["cours"]["programmation"]["php"][2]["durée"] = "14H"

$base_de_données["formation"]["cours"]["conception BD"]["mysql"][1]["titre"] = "Installation et configuration de MySQL/PhpMyAdmin";
$base_de_données["formation"]["cours"]["conception BD"]["mysql"][1]["durée"] = "1H";

$base_de_données["formation"]["cours"]["conception BD"]["mysql"][2]["titre"] = "Création d'une base de données sous MySQL/PhpMyAdmin";
$base_de_données["formation"]["cours"]["conception BD"]["mysql"][2]["durée"] = "3H";

$base_de_données["formation"]["cours"]["conception BD"]["mysql"][3]["titre"] = "Utiliser SQL sous MySQL/PhpMyAdmin/Ligne de commande";
$base_de_données["formation"]["cours"]["conception BD"]["mysql"][3]["durée"] = "7H";

$base_de_données["ventes"]["produits"][1]["id"] = "p1";
$base_de_données["ventes"]["produits"][1]["nom"] = "produit 2";
$base_de_données["ventes"]["produits"][1]["prix"] = "99,99";

$base_de_données["ventes"]["produits"][2]["id"] = "p2";
$base_de_données["ventes"]["produits"][2]["nom"] = "produit 2";
$base_de_données["ventes"]["produits"][2]["prix"] = "10,00";

$base_de_données["ventes"]["paniers"][1]["date"] = "01/02/2008";
$base_de_données["ventes"]["paniers"][1]["client"]["nom"] = "Toto";
$base_de_données["ventes"]["paniers"][1]["client"]["adresse"] = "72000 Le Mans";
$base_de_données["ventes"]["paniers"][1]["produits"][1] ["id"]= "p1";
$base_de_données["ventes"]["paniers"][1]["produits"][1]["qte"]= 5;
$base_de_données["ventes"]["paniers"][1]["produits"][2] ["id"]= "p2";
$base_de_données["ventes"]["paniers"][1]["produits"][2]["qte"]= 2;

$base_de_données["ventes"]["paniers"][2]["date"] = "01/02/2008";
$base_de_données["ventes"]["paniers"][2]["client"]["nom"] = "Popo";
$base_de_données["ventes"]["paniers"][2]["client"]["adresse"] = "53000 Laval";
$base_de_données["ventes"]["paniers"][2]["produits"][1] ["id"]= "p1";
$base_de_données["ventes"]["paniers"][2]["produits"][1]["qte"]= 1;

L'avantage qu'offre cette structure, est qu'elle permet hiérarchiser tout le contenu de la base de données d'une façon très structurée autours d'index bien précis. Ce doit correspondre à une organisation voulue par le programmeur pour satisfaire des traitements.

Par contre, le problème que pose cette structure, est que le programmeur ne peut pas appliquer les structures de lecture séquentielle comme "foreach" à l'ensemble de la structure vu que l'organisation hiérarchique change de modèle au changement de la base de données (voir l'exemple) ce qui veut dire que l'on ne peut appliquer un foreach que si l'on a un modèle uniforme qui organise l'ensemble des occurrences du tableau.

Ainsi on peut donc selon notre exemple, appliquer un foreach à la partie du tableau contenue dans l'index "formation" séparément de celle contenue dans l'index "ventes" vu que leur structures sous-jacentes ne sont pas les mêmes.
Modifié en dernier par sadeq le 10 févr. 2009, 15:05, modifié 1 fois.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Petit nouveau ! | 7 Messages

10 févr. 2009, 11:49

uaaa ça c'est de la réponse! J'apprécie beaucoup ce forum, pour la qualité et la pertinence des réponses que l'on peut y trouver!! c'est le seul qui m'a permit de vraiment avancer..!

Merci sadeq :wink:

J'ai bien utilisé autant de foreach qu'il y a d'index dans mon tableau.
je te montre le code permettant l'implémentation de celui ci:
for ($j=1;$j<=12;$j++)
	{
	//si le mois correspond au compteur j, alors le tableau s'implémente. 
		if($mois_fact==$j)
			{

			$tab[$ref_haisoft][$ref_ikoula][$IP][$j]=$prix."€";
			}
			//si la case du tableau est vide, cette case prend la valeur 0.
			if ($tab[$ref_haisoft][$ref_ikoula][$IP][$j]=="")
			{
			$tab[$ref_haisoft][$ref_ikoula][$IP][$j]=0;
			}
	}
et la le code permettant l'utilisation de mon tableau:
foreach ($tab as $key )
		{
	echo"<tr><td>".$key."</td>";//affichage des noms des serveurs / $key
		$total=0;
		foreach ($key as $op){
		echo "<td>".$op."</td>";//affichage de la ref_ikoula
			foreach ($op as $top => $value){

			echo "<td>".$top."</td>";//affichage des ip
			for ($a=1;$a<=12;$a++)
			{
			$total=$value[$a]+$total;//cumul des prix pour un serveur
	
			echo "<td>".$value[$a]."</td>";//affichage des prix par mois
			
			}
			}
			}
	echo "<td>".$total."€</td></tr>";
		}
Seulement avec ça, j'arrive uniquement a avoir les IP et les prix et cumuls qui s'affichent... :

Image

pourrais tu me montrer ou quelqu'un d'autre d'ailleurs comment faire pour avoir le bon affichage..?

merci :)

EDIT: c'est bon j'ai finalement trouvé la bonne syntaxe!! merci encore pour l'aide apportée!! je met ma solution au cas ou des personnes sont en quêtes de ces mêmes réponses et met mon post en résolu :D
foreach ($tab as $key =>$t )
		{
	echo"<tr><td>".$key."</td>";//affichage des noms des serveurs / $key
		$total=0;
		foreach ($t as $op =>$c){
		echo "<td>".$op."</td>";//affichage de la ref_ikoula
			foreach ($c as $top => $value){

			echo "<td>".$top."</td>";//affichage des ip
			for ($a=1;$a<=12;$a++)
			{
			$total=$value[$a]+$total;//cumul des prix pour un serveur
	
			echo "<td>".$value[$a]."</td>";//affichage des prix par mois
			
			}
			}
			}
	echo "<td>".$total."€</td></tr>";
		}