Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

[Résolu] PHP5 - tableaux associatifs multidimensionnels


Messages recommandés

Posté(e)

Bonjour,

 

un petit problème que je n'arrive pas à résoudre m'amène à poser ma question ici :P

 

dans un script php, je crée dynamiquement un array à 3 dimensions

résultat du print_r($array)

Array (	 [NO] => Array		 (			 [Autoroute] => 210.912			 [Fond] => 12.48			 [péri-urbain] => 359.424			 [Tunnel] => 295.776			 [urbain] => 203.424			 [Voie rapide urbaine] => 299.52		 )	  [NO2] => Array		 (			 [Autoroute] => 77.337			 [Fond] => 41.643			 [péri-urbain] => 113.031			 [Tunnel] => 95.184			 [urbain] => 118.98			 [Voie rapide urbaine] => 156.657		 )  )

 

ce tableau est constitué de 2 sous-tableaux dont la clé est une chaine de caractères: NO et NO2

dans chaque sous-tableau, les clés sont également des chaines de caractère.

 

J'aimerais pouvoir accéder aux valeurs numériques des feuilles de l'arbre et je pensais pouvoir procéder ainsi

echo $array['NO']['Autoroute'] pour obtenir 210.912

 

sauf que je reçois une Fatal Error: Cannot use string offset as an array

 

j'ai bien évidemment fait quelques recherches sur google et il semble que cela soit lié à PHP5 mais sans trop comprendre comment je pourrais remédier à ce souci

 

une idée?

  • Modérateurs
Posté(e)

Un tableau dont la clef de recherche est une chaîne de caractères, c'est bien ce qu'on appelle un hachage, ou tableau associatif ? J'ai eu l'occasion d'en utiliser avec Perl, c'est d'une puissance phénoménale et jouissive ! Un hachage à trois dimensions, je n'ai pas tenté le coup (avec Perl, on sent néanmoins que ça va fonctionner, intuitivement).

 

Mais excuse-moi, ceci ne répond absolument pas à ta question, je n'en ai pas l'expérience avec PHP. Ce qui est clair, c'est que je suis d'accord avec la façon dont tu initialises le contenu de ton tableau.

Posté(e)

là il y a un truc qui me chiffonne,

si je déclare en brut un tableau statique dans le code

$states = array (
 "Ohio" => array ("population" => 11353140, "capital"
 => "Columbus"),
 "Nebraska" => array("population" => 1711263,
 "capital" => "Omaha")
);
print_r($states);
echo $states["Ohio"]["population"];

 

ça fonctionne bien

(exemple de http://www.devshed.com/c/a/PHP/Arrays/ )

 

en fait, cela semble provenir de la façon dont je crée ce tableau

foreach ($_POST['analyseurs'] as &$analyseur) {
......
  foreach($_POST['polluants'] as &$polluant {
		......
		foreach($$xval as &$xvalue) {
			   ......
			   $temp["$polluant"]["$xvalue"] = $median;
		}
  }
$$analyseur = $temp;
}

 

je passe par un array temporaire car

1. en instanciant $$analyseur=array() en début de boucle et en faisant un array_push, je n'arrive pas à avoir de tableaux associatif (uniquement des index numériques)

2. en court-circuitant $temp par un $$analyseur["$polluant"]["$xvalue"]=$median, j'obtiens l'erreur de string offset

 

Le problème dans la suite du code, c'est que je veux rappeler ce tableau via $$analyseur['NO']['Autoroute'] par exemple (en fait la première et la deuxième clé sont remplacées par les variables qui vont bien).

Si je remplace $$analyseur par le nom de la variable ($ac32m par exemple), ça marche ......

Posté(e)

trouvé :P

 

comme c'est une variable dynamique, il faut que je l'encadre avec des accolades :P

 

echo ${$analyseur}[$polluant][$xvalue]

 

bon sang mais c'est bien sûr ...

 

Les variables dynamiques peuvent cependant poser un problème lorsqu'il y a plusieurs niveaux. Par exemple, comment PHP doit-il interpréter ceci : $var[1] ? Cela peut en effet être la variable dont le nom est la valeur de $var[1], mais cela peut être aussi la valeur de la cellule 1 du tableau $var... Pour s'y retrouver, on utilise des accolades ({ et }) : ${$var}[1] et ${$var[1]}. Ces accolades sont également utilisées lorsque l'on utilise les variables dynamiques dans les chaînes de caractères :

http://www.themanualpage.org/php/php_syntaxe.php

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...