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

PHP & Base de données Discussion :

supprimer array vide d'un foreach


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut supprimer array vide d'un foreach
    Bonjour,

    je souhaite afficher une liste de mes activites mais c est seulement dont j'ai la categorie principale:

    1)Je recupere l'id donner en GET.
    2)Je recupere les infos des sous-categories de cette categorie principale donné.
    3)Je recupere ensuite les activites de ces sous categories.

    Tout fonctionne presque bien a part qu'arriver à la recuperation de cette liste d'activite j'ai des array vide:

    Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( [0] => Activite Object ( [erreurs:protected] => Array ( ) [id_activite:protected] => 9 [date_activite:protected] => 2011-05-26 [horaire_activite:protected] => 10H00 [type_activite:protected] => ACTIVITE PAYANTE [budget_activite:protected] => 1 [ref_categorie_activite:protected] =

    je pense que c 'est du au parcours du foreach.

    Ce qui fait que aucune activite ne s'affiche, je pense dut au array() vide.

    Comment faire pour supprimer les array vide et garder les array remplit?

    MERCI.
    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
     
    if(isset($_GET['id_activite']))
    {
    //on recupere la liste des sous categorie de cette categorie
    $ListeCategorieById=$managerCategorie->getListSousReturnCategorieSup($_GET['id_activite']);
    //on fait une boucle sur la liste
    foreach ($ListeCategorieById as $ItemListeActivite)
    {
    	//on recupere la liste des activites de ces categories
     
    $ListeActivite=$managerActivite->getListActiviteById($ItemListeActivite->getIdCategorie());
    }
    //si on donne retourne NULL message d'erreur
    if($ListeActivite==NULL)
    {
    $body.='<p style="text-align:center;">Aucune activit&eacute; n&#146;est enregistrer actuellement dans cette cat&eacute;gorie.</p>';
    }
    }
    merci.

  2. #2
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Bonjour,

    tu peux déjà commencer par visualiser ton tableau pour voir s'il contient des tableaux vides :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo '<pre>';
    print_r($ListeCategorieById);
    echo '</pre>';

    Ensuite, dans ton foreach, si tu as un tableau vide, tu peux le supprimer en faisant ainsi :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    foreach ($ListeCategorieById as $cle=>$ItemListeActivite)
    {
       if(empty($ItemListeActivite)){
           unset($ListeCategorieById[$cle]);
           continue;
       }
     
       $ListeActivite=$managerActivite->getListActiviteById($ItemListeActivite->getIdCategorie());
    }

    PS: les puristes te diront peut être d'utiliser une fonction de callback avant ton foreach

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    merci mais cela n'a pas l'air de fonctionner, desoler.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( ) Array ( [0] => Activite Object ( [erreurs:protected] => Array ( ) [id_activite:protected] => 7 [date_activite:protected] => 2011-06-26 [horaire_activite:protected] => 10H00...... Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( )
    Array() toujours la a l'affichage.

  4. #4
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    c'est parce que ton tableau est un tableau qui contient d'autres tableaux etc. Il te faut imbriquer plusieurs foreach afin de descendre à la bonne profondeur dans tes tableaux pour supprimer les tableaux vides

  5. #5
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    merci d'essayer de m'eclaircir, je ne comprend pas trop, je doit faire plusieur foreach sur le meme?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    foreach ($ListeCategorieById as $ItemListeActivite)
    {
    foreach ($ListeCategorieById as $ItemListeActivite)
    {
    	//on recupere la liste des activites de ces categories
    $tListeActivite=$managerActivite->getListActiviteById($ItemListeActivite->getIdCategorie());
    }
    }
    C'est étrange tout de meme de faire ca?

  6. #6
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    ton tableau semble constituer de tableaux imbriqués les uns dans les autres. Pour accéder à un tableau situé dans un tableau tu dois parcourir une arborescence de tableau comme tu le ferais sous windows par exemple pour accéder à un sous dossier.

    EX:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $tableau = array(
                             array(
                                        array(),
                                        array(1, 2, 3)
                                    ),
                             array(
                                        array(4, 5, 6),
                                        array()
                                    ),
                          );

    Ici, tu as des tableaux vides mais qui sont imbriqués dans d'autres tableaux. Pour tester s'ils sont vides ou non, tu dois "descendre" dans l'arborescence de tes tableaux :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach($tableau as $cle=>$sousTab1)
          foreach($sousTab1 as $cle2=>$sousTab2)
               if(empty($sousTab2))
                    unset($tableau[$cle1][$cle2]);

  7. #7
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    oui mais la je pourrais avoir au moins 20 à 30 activites je ne peut pas 30 foreach, de plus les rajouter toujours ca sera pas possible.

    Merci.

  8. #8
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Dans ce cas, travailles en amont et assures toi de constituer un tableau ne comprenant pas de tableaux vides ou bien crée une fonction récursive qui va te supprimer les tableaux vides

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    fait comme ça
    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
    $items = array(
     	array(
    		array(),
    		array(1, 2, 3)
    	),
    	array(
    		array(4, 5, 6),
    		array()
    	),
    );
     
    $items = new RecursiveArrayIterator($items);
     
    foreach($items as &$item)
    {
        $item = array_filter($item);
    }
     
    $items = $items->getArrayCopy();
    print_r($items);
    :

  10. #10
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    bonjour,

    ca n'a pas l'air de trop fonctionner:
    $ListeCategorieById=$managerCategorie->getListSousReturnCategorieSup($_GET['id_activite']);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    foreach ($ListeCategorieById as $ItemListeActivite)
    {
    $items = new RecursiveArrayIterator($ItemListeActivite);
     
    foreach($items as &$item)
    {
        $item = array_filter($item);
    }
     
    $items = $items->getArrayCopy();
    print_r($items);
    }
    est ce mon code qui est faux?

    voici le print:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [�*�erreurs] => Array ( ) [�*�id_categorie] => 78 [�*�titre_categorie] => Sortie avec enfants [�*�description_categorie] => [�*�estActive_categorie] => [�*�date_modification_categorie] => 2011-05-27 17:21:23 [�*�date_creation_categorie] => 2011-05-27 17:21:26 ) Array ( [�*�erreurs] => Array ( ) [�*�id_categorie] => 79 [�*�titre_categorie] => Sorties week-end [�*�description_categorie] => [�*�estActive_categorie] => [�*�date_modification_categorie] => 2011-05-27 17:21:48 [�*�date_creation_categorie] => 2011-05-27 17:21:50 ) Array ( [�*�erreurs] => Array ( ) [�*�id_categorie] => 80 [�*�titre_categorie] => Sorties en semaine [�*�description_categorie] => [�*�estActive_categorie] => [�*�date_modification_categorie] => 2011-05-27 17:22:07 [�*�date_creation_categorie] => 2011-05-27 ....
    merci.

Discussions similaires

  1. Array, supprimer valeur vide.
    Par shonan dans le forum Langage
    Réponses: 2
    Dernier message: 10/12/2011, 15h20
  2. supprimer ligne vide excel
    Par ketchups dans le forum VB.NET
    Réponses: 5
    Dernier message: 09/10/2007, 14h01
  3. supprimer ligne vide
    Par SnakemaN dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 22/08/2007, 17h57
  4. Supprimer caractères vides
    Par Frosaf dans le forum VB.NET
    Réponses: 2
    Dernier message: 26/06/2007, 16h02
  5. return array vide et non null
    Par mereyj dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 18/04/2005, 20h25

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