Tableaux deux dimension "hybride"

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Tableaux deux dimension "hybride"

par guilt92 » 03 sept. 2006, 05:09

Ok merci pour vos réponses ca aide grandement !!

Effectivement puisque php sait "autoincrémenter" les tableaux je vais peut etre eviter de le déclarer !! Et merci beaucoup sadeq ce code aide vraiment a comprendre :)

Merci encore, vive PhpFrance :D

par Ryle » 01 sept. 2006, 09:54

En gros, un tableau a plusieurs dimension est simplement en réalité un tableau de tableau. Chacun se comporte donc comme n'importe quel tableau et tu peux ainsi en avoir certains indexés par un nombre, d'autre par un texte... Il suffit d'oublier les autres dimensions et de se travailler tableau par tableau :)

Quoi qu'il en soit, je vois pas trop l'intérêt de créer un tableau vide "relativement complexe" dans ta session. Tu vas ajouter des lignes inutiles juste pour déclarer tes index...
Autant l'ajouter uniquement lorsque tu le rempli et faire un test avec isSet pour pas avoir d'erreur quand tu l'utilises, nan ?

par sadeq » 01 sept. 2006, 09:35

Pour la structure du tableau suivante :

Origine | Destination | Cout
--------------------------------------------
0 | "blabla" | "..." | 243
1 |
2 |

...

Je propose la programmation suivante (en guise de cours):
<?php
//Déclarer la structure du tableau (non obligatoire)
$tableau = array ( array ("Origine"=>"", "Destination"=>"", "Cout"=>0) ); //c'est un array de array (tableau dans un autre) ou tableau à deux dimensions

//remplir la première ligne
   $tableau[0]["Origine"] = "blabla";
   $tableau[0]["Destination"] = "...";
   $tableau[0]["Cout"] = 243;

//remplir la deuxième ligne
   $tableau[1]["Origine"] = "blabla";
   $tableau[1]["Destination"] = "...";
   $tableau[1]["Cout"] = 1;

//Et ainsi de suite...
//Dans le cas où on souhaite ajouter une nouvelle ligne, 
//on n'a pas besoin de calculer le nouveau rang php le fait automatiquement:
   $tableau[]= array("Origine" => "blabla", "Destination" => "...", "Cout" => 2);
//Remarquez les [] vides désignent qu'il s'agit d'un nouvel index autoincrémenté

//Si l'on souhaite supprimer une ligne donnée
$index_à_supprimer = 1; //donner l'index à supprimer
unset ($tableau[$index_à_supprimer]);
//mais puisque l'index est numérique et que c'est une suite en plus
//il ne faut pas oublier de recalculer la nouvelle suite
$tableau = array_values($tableau);

//Si l'on souhaite afficher ce tableau (je préfére utiliser la boucle foreach)
if ( $tableau && is_array($tableau) ) { //ce test s'assure qu'il s'agit bien d'un tableau existant
     //boucle pour parcourir le tableau
     foreach ($tableau as $num_ligne=>$contenu){
           //ici, les variables déclarées après le mot "as" servent à :
          // $num_ligne : reçoit la valeur de l'index du tableau à chaque boucle
         //$contenu : reçoit la deuxième dimension du tableau composée
         //                des index nommés et leur contenu
         //Exemple:  le contenu peut être $contenu["Origine"] = "blabla" quand $num_ligne est à 0

         //Maintenant pour traiter le contenu récupèré par foreach à chaque bouclage : on affiche par exemple
         echo "<p>Ligne n° : ".$num_ligne; 
         echo "<p>Origine : ".$contenu["Origine"];
         echo "<p>Destination : ".$contenu["Destination"];         
         echo "<p>Cout : ".$contenu["Cout"];
    }//fin de la boucle foreach
}//fin de if
?>
Voilà :wink:

par Truc » 01 sept. 2006, 09:05

Salut,
Il y a un tuto en préparation concernant les tableaux... tu y aurais certainement trouvé une réponse.

Mais en attendant tu crée le tableau associatif en l'initialisant avec un array vide :
$tab["nom"] = array();

//ensuite tu ajoutes les données 
$tab["nom"][] = 1;
$tab["nom"][] = 2;

Tableaux deux dimension "hybride"

par guilt92 » 01 sept. 2006, 08:13

Bonjour a tous,

je suppose que la réponse a ma question est simple mais je n ai pas trouvé dans le tuto sur les tableaux et je vois pas trop comment faire.

En fait je voudrais créer un tableau a deux dimension mais avec une partie indéxée par le nom et l autre par le numéro, par exemple $tab["nom"][0];

Le probleme est que ce tableau sera en fait une variable de session, je voudrais simplement savoir comment le déclarer la premiere fois, c'est a dire comme dire qu'il y aura une colonne "origine" une colonne "destination" et ainsi de suite... le tout sans ajouter d'élement dedans au début, et pouvoir le remplir après... En gros je voudrais un tableau qui ressemble a ça :

Origine | Destination | Cout
--------------------------------------------
0 | "blabla" | "..." | 243
1 |
2 |

...

J'espère que c'est clair et possible à faire... Sinon la solution est un tableau a 2 dimension uniquement avec des indices numériques ?
(je précise que malheureusement je ne peux pas utiliser de base de données...)


Merci d avance.