les tableaux

Comment bien parcourir et afficher les element d'un tableaux

Le problème exposé dans ce sujet a été résolu.

Bonsoir

je possède un tableaux avec cette structure

1
2
3
4
5
$all = array(
    'titre1' => array("valeur1", "valeur2", ) ,
    'titre2' =>  array("valeur1", "valeur2", "valeur3",  ) ,
    'titre3' =>  array("valeur1", "valeur2", "valeur3", "valeur4", ) ,
     );

j'aimerais générer du html qui affiche chaque fois le titre et les valeur dans un tableaux mais je n'y arrive pas

Salut,

Il te faut une fonction récursive, qui s'appelle elle-même lorsque $value est un array.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<?php
function displayArray($array) {
  foreach($array as $key => $value) {
    if(!is_array($value) {
      echo $value;
    } else {
      echo $key;
      // C'est ici que réside la subtilité, puisque la fonction s'appelle elle-même.
      displayArray($value);
    }
  }
}

Je n'ai pas testé le code, mais dans l'idée c'est quelque chose comme ça.

+0 -0

Ça fonctionne aussi, avec ton tableau. Mais si tu modifies la structure de ton tableau, ton code ne fonctionnera plus, tandis qu'avec de la récursivité, cela fonctionnera. Mais pourquoi pas, si tu es sûr que la structure ne changera jamais.

Quel HTML désires-tu obtenir en sortie ? Parce que là sans le savoir c'est difficile de t'aider.

+0 -0

Bonjour,

La récursivité n'est pas forcément facile à comprendre (ou tout du moins à appréhender) au début. En informatique, une fonction récursive est une fonction qui s'appelle elle-même. On s'en sert souvent pour parcourir des tableaux à plusieurs dimensions, soit lorsqu'il y a trop de niveaux, soit quand on ne les connait pas.

Dans ton exemple, ton tableau a deux niveaux ; s'il en va toujours ainsi, c'est simple, tu mets un foreach dans un foreach, ça fonctionne très bien ! Mais si tu travailles sur un tableau avec 5, 6, 7 dimensions ou plus, cela complique les choses ; surtout si le tableau en question peut contenir soit 5, soit 6, soit 7 dimensions. Dans le cas où tu ne connais pas le nombre de dimensions (ou qu'elles sont trop nombreuses), tu n'as pas vraiment d'autre choix que de faire une fonction récursive.

Le principe est tout simple : tu as un tableau en argument, sur lequel tu travailles :

1
2
3
4
5
6
7
8
<?php
// La fonction récursive avec un tableau en paramètre
function recursiveFunction($array = array()){
  // On boucle sur le tableau qui est passé en paramètre
  foreach ($array as $item, $value) {
    // ...
  }
}

Ce code te permet de travailler sur le premier niveau du tableau passé en paramètre. Mais comment faire pour aller à un niveau plus bas ? En rentrant de nouveau dans la fonction ! Et pour cela, il suffit de vérifier que l'on ait bien un tableau :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
// La fonction récursive avec un tableau en paramètre
function recursiveFunction($array = array()){
  // On boucle sur le tableau qui est passé en paramètre
  foreach ($array as $item, $value) {
    // Si $value est un tableau, je rentre de nouveau dans ma fonction récursive
    if(is_array($value)) {
      recursiveFunction($value);
    }
  }
}

La « subtilité » c'est que quand tu appelles la fonction récursive au sein d'elle-même, elle ne travaille plus sur l'array qui lui était passé au début, mais sur un autre, $value dans notre cas, qui correspond à une dimension "n" du tableau.

Il faut bien comprendre l'ordre d'exécution de la fonction. Prenons le tableau suivant :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<?php
$array = array(
  'one'   => array('premier', 'first', 'primo'),
  'two'   => array('deuxième', 'second', 'secundo'),
  'three' => array('troisième' => array(
    'bonjour', 'salut', 'coucou'
  )),
);

recursiveFunction($array);

On entre dans la fonction puis dans la boucle. On arrive sur le premier élément du tableau, à savoir 'one'. SI sa valeur est un tableau, on appelle de nouveau la fonction avec comme argument la valeur (un tableau, donc). Dans notre cas, 'one' est bien un tableau, on rentre donc de nouveau dans la fonction récursive. On arrive au foreach et à la condition : est-ce que la valeur ('premier', 'first' ou 'primo') est un tableau ? Non. La fonction récursive n'est donc pas appelée, le script reprend donc : on passe à 'two'. Le même processus se passe. On termine 'two'. On passe alors à 'three', qui est lui aussi un tableau. Donc : est-ce que 'three' est un tableau ? Oui : on rentre de nouveau dans la fonction récursive. Est-ce que 'troisième' est un tableau ? Oui : on entre de nouveau dans la fonction récursive. Est-ce que 'bonjour', 'salut' ou 'coucou' sont des tableaux ? Non, le script continue. Il n'y a plus d'élément à traiter, on sort de la fonction pour de bon.

Comme tu le vois, cela peut durer longtemps, en fonction du nombre de tableaux et de leurs profondeurs.

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte