Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/06/2011, 10h04   #1
Membre du Club
 
Inscription : janvier 2008
Messages : 705
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 705
Points : 66
Points : 66
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 :
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.
kate59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 10h15   #2
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Bonjour,

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

Code php :
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 :
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
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/06/2011, 10h22   #3
Membre du Club
 
Inscription : janvier 2008
Messages : 705
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 705
Points : 66
Points : 66
merci mais cela n'a pas l'air de fonctionner, desoler.

Code :
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.
kate59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 10h26   #4
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
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
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 10h30   #5
Membre du Club
 
Inscription : janvier 2008
Messages : 705
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 705
Points : 66
Points : 66
merci d'essayer de m'eclaircir, je ne comprend pas trop, je doit faire plusieur foreach sur le meme?

Code :
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?
kate59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 10h45   #6
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
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 :
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 :
1
2
3
4
5
 
foreach($tableau as $cle=>$sousTab1)
      foreach($sousTab1 as $cle2=>$sousTab2)
           if(empty($sousTab2))
                unset($tableau[$cle1][$cle2]);
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/06/2011, 10h58   #7
Membre du Club
 
Inscription : janvier 2008
Messages : 705
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 705
Points : 66
Points : 66
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.
kate59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 11h02   #8
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
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
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 11h09   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
fait comme ça
Code :
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);
:
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 11h55   #10
Membre du Club
 
Inscription : janvier 2008
Messages : 705
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 705
Points : 66
Points : 66
bonjour,

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

Code :
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 :
Array ( [&#65533;*&#65533;erreurs] => Array ( ) [&#65533;*&#65533;id_categorie] => 78 [&#65533;*&#65533;titre_categorie] => Sortie avec enfants [&#65533;*&#65533;description_categorie] => [&#65533;*&#65533;estActive_categorie] => [&#65533;*&#65533;date_modification_categorie] => 2011-05-27 17:21:23 [&#65533;*&#65533;date_creation_categorie] => 2011-05-27 17:21:26 ) Array ( [&#65533;*&#65533;erreurs] => Array ( ) [&#65533;*&#65533;id_categorie] => 79 [&#65533;*&#65533;titre_categorie] => Sorties week-end [&#65533;*&#65533;description_categorie] => [&#65533;*&#65533;estActive_categorie] => [&#65533;*&#65533;date_modification_categorie] => 2011-05-27 17:21:48 [&#65533;*&#65533;date_creation_categorie] => 2011-05-27 17:21:50 ) Array ( [&#65533;*&#65533;erreurs] => Array ( ) [&#65533;*&#65533;id_categorie] => 80 [&#65533;*&#65533;titre_categorie] => Sorties en semaine [&#65533;*&#65533;description_categorie] => [&#65533;*&#65533;estActive_categorie] => [&#65533;*&#65533;date_modification_categorie] => 2011-05-27 17:22:07 [&#65533;*&#65533;date_creation_categorie] => 2011-05-27 ....
merci.
kate59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h46.


 
 
 
 
Partenaires

Hébergement Web