Parcourir un tableau à n dimensions

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 : Parcourir un tableau à n dimensions

Re: Parcourir un tableau à n dimensions

par FuZZyLine » 02 oct. 2009, 08:52

Merci une nouvelle fois pour ton aide, ton soutien, ton apport.
Je suis heureuse et vais me coucher moins bête ce soir hi hi :)
Bien... Bonne nuit alors, oups, bonjour ;)
J'ai progressé, on touche au but, mais j'ai toujours une donnée farfelue, cf stp l'exemple ci-dessous. Le print_r($mon_tableau); renvoie ceci :
[...]
Grâce à vos codes, j'ai fait ceci :
foreach($mon_tableau as $key => $value){
  foreach($value as $key1 => $value1){
     foreach($value1 as $key2 => $value2){
	foreach($value2 as $key3 => $value3){
           $temp = mon_tableau["root"][$key1][$key2][$key3]["col1"];
             echo $temp;//me renvoie 1 au lieu de 11 si je ne m'abuse :S
             ...
[...]
[*]Bisous :love7:

Ps1 : [**]le getValue ne fonctionne malheureusement pas mais ca doit être à cause de mon cerveau de fille
Ps2 : je taquine quand je parle du clan [***]garçons/filles. Je suis pas féministe bande de machos ! :lol:
Attention: Cette méthode est valable qu'à un nombre *toujours" égaux de niveaux.
Si le nombre augmente tes données seront invalides...

[*] Dire qu'en général je demande 70€/Heure en prestation intellectuelles/techniques... (joke)

[**] Rah... Malin ca ! Mon esprit *mec* a encore frappé ! La fonction getValue était un exemple.
Celle-ci n'existe pas. Je parlais au condionnel. Ce type de requête est possible à condition, biensur,
de la développer. Assez simple à faire mais assez longue.

[***]Matcho oui ! Mais on le vaut bien... lol ...merde, je viens de confirmer que je le suis eh eh eh ;) :oops:

Bon je dois y aller, bon code et si besoin de plus d'infos pour ce sujet ou un autre hésite pas, @+ ;)

Re: Parcourir un tableau à n dimensions

par foetus69 » 02 oct. 2009, 02:06

CA Y EST !!!!!

J'ai compris mon erreur, j'étais perdue dans mon arborescence avec tous ces tableaux et je descendais un cran trop bas.

Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci
Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci

Je craque mais les 1000 y sont :D

Re: Parcourir un tableau à n dimensions

par foetus69 » 02 oct. 2009, 01:47

Merci une nouvelle fois pour ton aide, ton soutien, ton apport.

Je suis heureuse et vais me coucher moins bête ce soir hi hi :)

J'ai progressé, on touche au but, mais j'ai toujours une donnée farfelue, cf stp l'exemple ci-dessous. Le print_r($mon_tableau); renvoie ceci :
Array
(
    [root] => Array
        (
            [1] => Array
                (
                    [2] => Array
                        (
                            [col1] => 11
                        )

                )

        )

)
Grâce à vos codes, j'ai fait ceci :
foreach($mon_tableau as $key => $value){
  foreach($value as $key1 => $value1){
     foreach($value1 as $key2 => $value2){
	foreach($value2 as $key3 => $value3){
           $temp = mon_tableau["root"][$key1][$key2][$key3]["col1"];
             echo $temp;//me renvoie 1 au lieu de 11 si je ne m'abuse :S
             ...
Le tableau a été alimenté de la sorte :
   $iIndex++;
   $mon_tableau['root'][$iIndex][$valeur] = array (
    "col1" => $valeur2);
Bisous :love7:

Ps1 : le getValue ne fonctionne malheureusement pas mais ca doit être à cause de mon cerveau de fille
Ps2 : je taquine quand je parle du clan garçons/filles. Je suis pas féministe bande de machos ! :lol:

Re: Parcourir un tableau à n dimensions

par FuZZyLine » 01 oct. 2009, 15:21

Salut,
Re re c'est de nouveau moi mais je vais filer au lit. Merci !
Bah prenons l'exemple d'un caddie électronique qui se trouverait en array 4.
Comment atteindre la qté et le prix dans la donne suivante :
-> indice du tableau, id article, qté article, poids, prix unitaire
sachant que j'ai alimenté ce dernier comme suit :
$table['lvl1'][][$v] = array ("indice" => "", art => $v2, qte => $qte, poids => $poids, prixu => $prixu);
J'me complique p'tet la vie, j'ai des circonstances atténuantes (chui une fille :lol:)
Je vais tenter de simplifier (hum... étant un mec ca va *pas* être facile mais...)

Ton exemple: Donnera

Code : Tout sélectionner

$table["lvl1"][INDICE_NUMERIQUE_INCREMENTE][$v]["indice"] => ""; $table["lvl1"][INDICE_NUMERIQUE_INCREMENTE][$v]["art"] => $V2; $table["lvl1"][INDICE_NUMERIQUE_INCREMENTE][$v]["qte"] => $qte; $table["lvl1"][INDICE_NUMERIQUE_INCREMENTE][$v]["poids"] => $poids; $table["lvl1"][INDICE_NUMERIQUE_INCREMENTE][$v]["prixu"] => $prixu;
Les éléments que tu veux récupérer se feront comme ci-après:

Code : Tout sélectionner

$indice = $table["lvl1"][INDICE_NUMERIQUE_INCREMENTE][$v]["indice"]; $art = $table["lvl1"][INDICE_NUMERIQUE_INCREMENTE][$v]["art"]; $qte = $table["lvl1"][INDICE_NUMERIQUE_INCREMENTE][$v]["qte"]; $poids = $table["lvl1"][INDICE_NUMERIQUE_INCREMENTE][$v]["poids"]; $prixu = $table["lvl1"][INDICE_NUMERIQUE_INCREMENTE][$v]["prixu"];
Le problème est ton index (indice) inconnu contenu entre crochet. Le [] dit à PHP d'incrémnter
automatiquement l'indice. Si tu veux le connaître il te faut passer par des boucles encapsulées.
Boucles dont zeus et @rthur ont parlés: foreach($tableau AS $key => $value)
Ou $key représente l'indice du tableau scanné et $valeur la valeur résultante qui peut (ou pas)
être un tableau. D'autre part il incrémente à *tous* les coups quand il rencontre cette forme ci: []
donc ton code (exemple) est invalide tel que je comprends l'exemple.

La logique serait:

Code : Tout sélectionner

$iIndex++; $indice = $table["lvl1"][$iIndex][$v]["indice"]; $art = $table["lvl1"][$iIndex][$v]["art"]; $qte = $table["lvl1"][$iIndex][$v]["qte"]; $poids = $table["lvl1"][$iIndex][$v]["poids"]; $prixu = $table["lvl1"][$iIndex][$v]["prixu"];
Tu peux aussi récupérer la référence d'un élément de cette façon: $référence = & $art = $table["lvl1"];
et le modifier. Les références sont géniales autant les utiliser.

Donc, passons à la réponse : Puisque tu connais le premier indice du tableau il te faut faire ainsi:
$item = Array();

function getItem($arrayRef)
{
   foreach($table["lvl1"] => $value_1)
   {
      // $value_1 = L'index inconnu
      //
      foreach($value AS $key => $value_2)
      {
         // $value_2 = $V, Autrement dit le level de tes items, donc
         //
         $arrayRef =  $value_2
         return true;
      }
   }
}

echo $item["indice"];
echo $item["art"];
echo $item["qte"];
echo $item["poids"];
echo $item["priu"];
Si j'ai pas oublié 1 indice (level) ca doit rouller. Mais la procédure est très très lente et le
code pas très "zoli". Le mieux serait effectivement (pardon je me répète) d'utiliser une class
de tree... telle que celle proposée plus haut mais... bon, j'insiste pas ;-)

J'espère t'avoir mis sur la piste, si tu veux plus d'infos... @+ ;-)

EDIT: Il est possible, aussi, d'interroger les tableaux de cette manière et c'est, je pense,
ce que tu cherches à faire. Un p'tit exemple pour la route:
$array["root"]["articles]["nom"] = "Le_nom";
$array["root"]["articles]["poids"] = "515";
$array["root"]["articles]["prix"] = "999€99";
$array["root"]["articles]["id"] = "65465487";

// Et la tu récupères ce que tu veux en indiquant le path avec des / ou autre
//
$string = getValue($array, "root/articles/nom");
$string = getValue($array, "root/articles/prix");
C'est juste un exemple. La procédure (je fais vite en essayant d'être compréhensible)
Il faut passer en argument le path, créer un tableau à partir de la chaine dont le séparateur
peut (comme l'éxemple) être le / et effectuer une récursivité tant que la valeur est un tableau ET
(&&) et tant que le path est en concordence avec le tableau d'origine.

Un peu long à développer donc hors cadre fofo mais sait-on jamais ;)

Je te laisse en espérant ne pas t'avoir embrouillé ;)

@+ ;)

Re: Parcourir un tableau à n dimensions

par foetus69 » 01 oct. 2009, 00:40

Re re c'est de nouveau moi mais je vais filer au lit. Merci !

Bah prenons l'exemple d'un caddie électronique qui se trouverait en array 4.
Comment atteindre la qté et le prix dans la donne suivante :

-> indice du tableau, id article, qté article, poids, prix unitaire

sachant que j'ai alimenté ce dernier comme suit :
$table['lvl1'][][$v] = array ("indice" => "", art => $v2, qte => $qte, poids => $poids, prixu => $prixu);
J'me complique p'tet la vie, j'ai des circonstances atténuantes (chui une fille :lol:)

Re: Parcourir un tableau à n dimensions

par FuZZyLine » 30 sept. 2009, 20:50

Re,
Bonjour et merci fuZZyline, mais la POO c'est trop touchy pour moi pour le moment :lol:

Par contre je voudrais bien un coup de main pour réussir à parcourir les colonnes de mon array du 4ème niveau pour en ressortir un voir tous les enregistrements.

J'ai écrit un $key5[$i] par le biais d'un for mais je n'obtiens que le nom de la première colonne à savoir id que j'avais alimenté de cette façon :
$table['lvl1'][][$v] = array (
    "id" => $v2)
et ca ne m'écrit que des id, id, id (l'index en quelque sorte) alors que je voudrais la valeur associée c'est à dire $v2.

Tu vois ce que je veux dire ?

f69 #-o
@rthur et zeus ont répondus enfaite s'agit d'en placer autant que tu veux de foreach
encapsulés. Sinon tu as cette solution mais pas le temps alors surement des erreurs, dsl.
function tree($array, $level = 0)
{
   foreach($array AS $id => $value)
   {
      if (is_array($value)) tree ($value, $level++);
      echo $id." // ".$value."<br />";
   }
}
tree($Ton_Tableau);

Sinon, ma class dont j'ai donné l'adresse permet de les lister 1 à 1. La c'est pas le cas
sans code supplémentaire. La class en elle même n'oblige en rien utiliser les objets...
Mais permet (en plus de les lire) de lire les tableaux à X dimension(s)... soit même
si t'as un tableau à 2²100 ;)

Pour ta question:
J'ai écrit un $key5[$i] par le biais d'un for mais je n'obtiens que le nom de la première colonne à savoir id que j'avais alimenté de cette façon :
$table['lvl1'][][$v] = array ("id" => $v2)
et ca ne m'écrit que des id, id, id (l'index en quelque sorte) alors que je voudrais la valeur associée c'est à dire $v2.
tu assignes un tableau à l'élément $V dont la clef est ID et la valeur: $V2. J'avoue que je comprends
pas le problème.
echo $table['lvl1'][][$v]["id"];
doit te retourner sa valeur et non sa clef.

J'essaie de voir ca demain, la je dois cut, dsl.

Bon j'y go @+ ;)

Re: Parcourir un tableau à n dimensions

par foetus69 » 30 sept. 2009, 20:23

Bonjour et merci fuZZyline, mais la POO c'est trop touchy pour moi pour le moment :lol:

Par contre je voudrais bien un coup de main pour réussir à parcourir les colonnes de mon array du 4ème niveau pour en ressortir un voir tous les enregistrements.

J'ai écrit un $key5[$i] par le biais d'un for mais je n'obtiens que le nom de la première colonne à savoir id que j'avais alimenté de cette façon :
$table['lvl1'][][$v] = array (
    "id" => $v2)
et ca ne m'écrit que des id, id, id (l'index en quelque sorte) alors que je voudrais la valeur associée c'est à dire $v2.

Tu vois ce que je veux dire ?

f69 #-o

Re: Parcourir un tableau à n dimensions

par FuZZyLine » 30 sept. 2009, 15:45

Salut,
Génial ! A peine poster que déjà j'ai des réponses :D
Merci, merci beaucoup :love7:
Il ne me reste plus qu'à gérer non pas la profondeur mais le colonage de chaque array et c'est bon, quoique 8-|
C'est de l'ordre du débutant ma demande ?
In utero (c'est mon côté grunge qui parle :))
Tu peux aussi tiliser cette class... :

vos-contributions/hierarchie-array-obje ... 49534.html

'fin ce que j'en dis, je dis rien ;)

@+ bon code ;)

Re: Parcourir un tableau à n dimensions

par foetus69 » 29 sept. 2009, 16:25

Génial ! A peine poster que déjà j'ai des réponses :D

Merci, merci beaucoup :love7:

Il ne me reste plus qu'à gérer non pas la profondeur mais le colonage de chaque array et c'est bon, quoique 8-|

C'est de l'ordre du débutant ma demande ?

In utero (c'est mon côté grunge qui parle :))

Re: Parcourir un tableau à n dimensions

par @rthur » 29 sept. 2009, 15:28

Bonjour,
si tu veux parcourir plusieurs niveau dans ce tableau, il faut imbriquer les foreach()
foreach($tableau as $key => $value)
{
  foreach($value as $key1 => $value1)
  {
    foreach($value1 as $key2 => $value2)
    {
      //...
    }
  }
}
Là où ça se complique un peu, c'est si tu ne connais pas la profondeur de ton tableau.
Pour compléter la réponse de Zeus, si tu ne connais pas la profondeur alors il faut faire de la récursivité :
function afficher_tablo($tableau) {
    foreach($tableau as $key => $value) {
        if (is_array($value)) {
                afficher_tablo($value);
        }else{
                print $value."<br />";
        }
    }
}

$mon_beau_tablo=array("1a", array("2a","2b", array("3a")));

afficher_tablo($mon_beau_tablo);

Re: Parcourir un tableau à n dimensions

par zeus » 29 sept. 2009, 15:19

Bonjour et bienvenue sur PHPFrance.

La fonction de base pour parcourir un tableau, c'est foreach().
foreach($tableau as $key => $value)
{
  echo $key.'-'.$value.'<br />';
}
Ensuite, si tu veux parcourir plusieurs niveau dans ce tableau, il faut imbriquer les foreach()
foreach($tableau as $key => $value)
{
  foreach($value as $key1 => $value1)
  {
    foreach($value1 as $key2 => $value2)
    {
      //...
    }
  }
}
Là où ça se complique un peu, c'est si tu ne connais pas la profondeur de ton tableau.

Parcourir un tableau à n dimensions

par foetus69 » 29 sept. 2009, 14:52

Bonjour,

Il est difficile de faire la part des choses entre le niveau débutant et avancé surtout quand c'est son premier message. Quelque soit votre intervention elle sera la bienvenue.

Je cherche à parcourir un tableau à n dimensions, disons 4 pour l'exemple (je sais pas si c'est viable) et d'afficher tous les enregistrements, un peu comme le fameux :
echo("<pre>");
print_r($mon_tableau);
echo("</pre>");
Jeune demoiselle recherche un mec mortel :love7: , non mais ca va pas lol !!! :axe:

foetus69