IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Parcours d'un tableau tridimensionnel contenant des tableaux [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Points : 275
    Points
    275
    Par défaut Parcours d'un tableau tridimensionnel contenant des tableaux
    Bonjour tout le monde.

    Voici mon problème.
    Je rempli un tableau avec des images (et leur chemin sur le disque) qui sont sur mon C: grâce à une fonction récursive qui me retourne donc mon tableau.

    J'aimerais ensuite faire des tests sur les données contenues dans ce tableau, mais je ne sais pas comment faire pour le parcourir car non seulement il est à 3 dimensions mais en plus il contient d'autres tableaux.

    Ex :
    echo $tab[0]; = Array
    echo $tab[0][0]; = Array
    echo $tab[0][0][0]; = image.jpg
    echo $tab[0][1]; = image2.jpg
    echo $tab[100]; = image3.jpg
    etc.

    J'ai bien essayé avec des for imbriqués en testant si telle ou telle occurence du tableau est elle aussi un tableau mais je n'obtiens que des erreurs...
    Code testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    for ($i = 0; $i < count($files); $i++) {
     
        if (is_array($files[$i])) {
            for($j = 0; $j < count($files[$i]); $j++) {
     
                if (is_array($files[$i][$j])) {
                    for($k = 0; $k < count($files[$i][$j]); $k++) {
                        if (!empty($files[$i][$j][$k]))
                            echo $files[$i][$j][$k] . "<br>";
                    }
                }
                else {
                    if (!empty($files[$i][$j]))
                        echo $files[$i][$j] . "<br>";
                }
            }
        }
        else {
            if (!empty($files[$i]))
                echo $files[$i] . "<br>";
        }
    }
    Voilà j'aimerais donc savoir par quel moyen je peux arriver à parcourir ce tableau et ses 30 000 enregistrements
    Je ne sais pas si j'ai bien exposé mon problème donc n'hésitez pas à me demander

    Merci d'avance !

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    il faut utiliser foreach() pour parcourir un tableau.

    Si ton niveau d'aborescence est fixe, défini et faible, tu peux imbriquer des boucles.
    Sinon tu peux faire une fonction recursive.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Points : 275
    Points
    275
    Par défaut
    Citation Envoyé par sabotage Voir le message
    il faut utiliser foreach() pour parcourir un tableau.

    Si ton niveau d'aborescence est fixe, défini et faible, tu peux imbriquer des boucles.
    L'arborescence de mon dossier tu veux dire ?
    Citation Envoyé par sabotage Voir le message
    Sinon tu peux faire une fonction recursive.
    J'ai bien essayé mais je n'arrive pas à voir comment faire. Faire des foreach oui mais quoi mettre dedans, c'est ça mon souci. Je suppose qu'il faut que je continue sur mon idée de tester si l'occurence en cours est un tableau ou pas, mais après ?

  4. #4
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Points : 131
    Points
    131
    Par défaut
    Faire des foreach oui mais quoi mettre dedans
    Voilà le résultat avec foreach :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    foreach ($files as $value) 
    {
    	if (is_array($value)) 
    	{
    		foreach ($value as $value_bis) 
    		{
    			if (is_array($value_bis)) 
    			{
    				foreach ($value_bis as $value_ter) 
    				{
    					if (!empty($value_ter)) {
    						echo $value_ter . '<br>';
    					}
    				}
    			} else {
    				if (!empty($value_bis)) {
    					echo $value_bis . '<br>';
    				}
    			}
    		}
    	} else {
    		if (!empty($value)) {
    			echo $value . '<br>';
    		}
    	}
    }
    J'ai bien essayé avec des for imbriqués en testant si telle ou telle occurence du tableau est elle aussi un tableau mais je n'obtiens que des erreurs...
    Quelles sont les erreurs que tu obtiens ?
    Cordialement.

  5. #5
    Membre actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Points : 275
    Points
    275
    Par défaut
    Citation Envoyé par ninikkhuet Voir le message
    Voilà le résultat avec foreach :
    Ah ben ça au moins ça fonctionne. J'avais donc la bonne syntaxe mais pas la bonne boucle...
    Merci

    Citation Envoyé par ninikkhuet Voir le message
    Quelles sont les erreurs que tu obtiens ?
    J'avais bien quelques occurences de mon tableau qui étaient retournées mais sinon je n'avais que des erreur "Undifiened offset" et le numéro de l'offset en question.

  6. #6
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Points : 131
    Points
    131
    Par défaut
    Donc c'est bon ? tu n'as plus d'erreurs ? si c'est le cas, n'oublies pas de cliquer sur "Résolu"
    Cordialement.

  7. #7
    Membre actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Points : 275
    Points
    275
    Par défaut
    Apparemment c'est bon, mis à part un petit truc que je viens de remarquer. Certaines lignes retournées par le code que tu m'as donné donnent "Array". Y'en a une bonne centaine. Tu saurais pourquoi ?

  8. #8
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Points : 131
    Points
    131
    Par défaut
    tu sais à quelle ligne ça affiche array ? Je suppose que ça doit être au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $value_ter . '<br>';
    puisque dans les autres cas on teste si c'est un tableau..
    Cordialement.

  9. #9
    Membre actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Points : 275
    Points
    275
    Par défaut
    Effectivement c'est bien à cette ligne là qu'il m'affiche Array.

  10. #10
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Points : 131
    Points
    131
    Par défaut
    Du coup ça veut dire que ton tableau a + de 3 dimensions...fais un print_r($files) avant les boucles pour vérifier que ton tableau est bien tridimensionnel.
    Cordialement.

  11. #11
    Membre actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Points : 275
    Points
    275
    Par défaut
    Oui c'est ce que je me suis dit aussi. Du coup, je me suis fait une fonction récursive. Pas le choix, j'vais pas faire 8 000 boucles imbriquées

  12. #12
    Membre actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Points : 275
    Points
    275
    Par défaut
    ok, à partir de ça je devrais arriver à me débrouiller.

    Merci ninikkhuet et sabotage

    PS : le code de la méthode pour ceux qui ça intéresserait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function parcourTab($tab) {
        foreach ($tab as $val) {
            if (is_array($val))
                parcourTab($val);
            else
                echo $val . "<br>";
     
        }
    }
    Bien entendu, elle ne sert qu'à afficher le contenu du tableau mais si comme moi vous avez un traitement à faire dessus, il suffit de modifier le else
    Parce que là c'est une sorte de print_r en fait xD

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tableau associatif contenant des tableaux
    Par gianffranco dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 15/03/2011, 14h40
  2. [iText] Tableau contenant des tableaux
    Par drizztoli dans le forum Documents
    Réponses: 2
    Dernier message: 01/09/2010, 21h51
  3. [Hash] table de hachage contenant des tableaux
    Par GLDavid dans le forum Langage
    Réponses: 4
    Dernier message: 19/01/2007, 17h03
  4. [MySQL] Parcours d'un tableau et suppression des entrées
    Par padoberg dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/07/2006, 13h41
  5. [C#] Tableau généré contenant des checkbox
    Par la_muraille dans le forum ASP.NET
    Réponses: 3
    Dernier message: 04/04/2005, 12h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo