Page 1 sur 1

suppression element vide tableau associatif

Posté : 04 févr. 2010, 12:11
par asdepik
bonjour,
je voudrais supprimer les elements vides de mon tableau associatif

Code : Tout sélectionner

Array ( [0] => Array ( [value] => IP [id] => 1 [event_id] => 1 [attribute_id] => [bool_value] => ) [1] => Array ( [value] => Browser [id] => 2 [event_id] => 1 [attribute_id] => 2 [bool_value] => ) )
pour retourner

Code : Tout sélectionner

Array ( [0] => Array ( [value] => IP [id] => 1 [event_id] => 1 ) [1] => Array ( [value] => Browser [event_id] => 1 [attribute_id] => 2 ) )
j'ai utilisé cette fonction mais sans succès

Code : Tout sélectionner

function unset_empty_values(&$array) { foreach ($array as $k => $v) { if (empty($v)) unset($array[$k]); } }
Si vous avez une idée

Re: suppression element vide tableau associatif

Posté : 04 févr. 2010, 12:14
par stealth35
test :
$array = array_map('array_filter', $array);

Re: suppression element vide tableau associatif

Posté : 04 févr. 2010, 13:40
par asdepik
j'ai essayé votre proposition mais sans résultat

et

vue que mon tableau est à 2 niveaux

j'ai fait comme ça mais sans succès

Code : Tout sélectionner

function unset_empty_values(&$array) { foreach ($array as $v) { if(is_array($v)) { foreach($v as $cle => $valeur) { if(empty($valeur)) { unset($array[$cle]); } } } } }
je fais comme ça mais rien ne s'affiche

Code : Tout sélectionner

print "<pre>"; unset_empty_values($monTab); print "</pre>";
est-ce dois-je retourner quelque chose à ma function comme return $array ?

Re: suppression element vide tableau associatif

Posté : 04 févr. 2010, 14:15
par stealth35
moi j'ai essayer ca marche, met ton code en entier pour voir

Re: suppression element vide tableau associatif

Posté : 04 févr. 2010, 14:39
par asdepik
ah oui oui
je me suis cassé la tête pour rien

une seule ligne suffit


j'ai fait comme ça

$array = array_map('array_filter', $montab);

alors que ça doit être comme ça

$montab= array_map('array_filter', $montab);

merci bien Stealth35

Re: suppression element vide tableau associatif

Posté : 04 févr. 2010, 14:40
par stealth35
plus qu'a mettre ton topic sur 'résolu' (petit croix verte ) sur la bonne réponse :wink:

Re: suppression element vide tableau associatif

Posté : 04 févr. 2010, 15:18
par AB
Et pour la petite histoire, tu peux en "rajouter une couche" si tu veux nettoyer ton tableau principal des tableaux internes éventuellement vides (puisque la suppression des éléments vides des tableaux internes peut produire des tableaux internes vides) :
$montab= array_filter(array_map('array_filter', $montab));

Re: suppression element vide tableau associatif

Posté : 19 févr. 2010, 10:51
par jajax
bonjour,

Avec un tableau de cette forme

Code : Tout sélectionner

Array ( [0] => Array ( [0] => Array ( [value] => dateupload [0] => dateupload [bool_value] => [1] => [integer_value] => [2] => [double_value] => [3] => [timestamp_value] => 2010-01-02 00:00:02 [4] => 2010-01-02 00:00:02 [text_value] => [5] => ) [1] => Array ( [value] => encoding [0] => encoding [bool_value] => [1] => [integer_value] => [2] => [double_value] => [3] => [timestamp_value] => [4] => [text_value] => flv [5] => flv ) [2] => Array ( [value] => filname [0] => filname [bool_value] => [1] => [integer_value] => [2] => [double_value] => [3] => [timestamp_value] => [4] => [text_value] => file_0.flv [5] => file_0.flv ) [3] => Array ( [value] => lastseen [0] => lastseen [bool_value] => [1] => [integer_value] => [2] => [double_value] => [3] => [timestamp_value] => [4] => [text_value] => USA [5] => USA ) ) )
j'ai essayé ça
$montab= array_filter(array_map('array_filter', $montab)); 
et
$array = array_map('array_filter', $array);
mais sans résultat

si je comprend bien le code
$array = array_map('array_filter', $array);
est pour un tableau à 1 seule dimension

et peut être
$array = array_map(array_map('array_filter', $array));
pour celui à 2 dimensions

merci pour votre conseil

Re: suppression element vide tableau associatif

Posté : 19 févr. 2010, 17:45
par AB

j'ai essayé ça
$montab= array_filter(array_map('array_filter', $montab)); 
et
$array = array_map('array_filter', $array);
mais sans résultat
Ces deux fonctions sont pour des tableaux à deux dimensions, la particularité de la première méthode est qu'elle efface les tableaux vides en plus d'effacer les lignes vides (ce que se contente de faire la seconde fonction).

Par contre le dernier tableau que tu nous montre est un tableau à trois dimensions. Il faut donc boucler ton tableau pour employer l'une ou l'autre de ces fonctions sur les valeurs de ton tableau principal, puisque ces valeurs sont des tableaux à deux dimensions.