PHP Array-suppression des valeurs vides
Comment faire pour boucler ce tableau et supprimer les valeurs vides:
[28] => Array
(
[Ivory] =>
[White] =>
)
[29] => Array
(
[Ivory] =>
[White] =>
)
[30] => Array
(
[Ivory] =>
[White] => 36
)
[31] => Array
(
[White] => 24
)
alors disons qu'il enlèverait 28, 29 et juste de L'ivoire de 30...
Merci!
6 réponses
je crois que cela va faire ce que vous êtes à la recherche de:
foreach( $array as $key => $value ) {
if( is_array( $value ) ) {
foreach( $value as $key2 => $value2 ) {
if( empty( $value2 ) )
unset( $array[ $key ][ $key2 ] );
}
}
if( empty( $array[ $key ] ) )
unset( $array[ $key ] );
}
il fera une boucle à travers votre tableau extérieur, descendra dans n'importe quel tableau qu'il contient et supprimera les clés dont les valeurs sont vides. Ensuite, une fois que c'est fait, il va enlever toutes les clés du tableau extérieur dont les sous-valeurs étaient toutes vides, aussi.
Notez que cela ne fonctionnerait pas pour un générique array, juste celui que vous avez fourni (en deux dimensions).
je vois que vous avez déjà une solution de travail, mais juste pour le fun, avec array_map bonté:
$array = array_filter(array_map('array_filter', $array));
une Autre manière, à l'aide de preg_grep
:
foreach($array as $key => $subarray) {
$array[$key] = preg_grep('/^$/', $subarray, PREG_GREP_INVERT);
}
mise à Jour: oublié d'enlever les tableaux vides. La technique montrée en @la réponse de Ryan peut aussi être appliqué ici.
//Check Array Remove Empty Key
$ixx=0; $ix=0;//Set Array First.
while(end(array_keys($a1))>=$ix){ //Check Last Key in Array
if($a1[$ix]!=""){ //Check Empty Key
$ax[$ixx]=$a1[$ix];$ixx++; } //Remove Empty Key
$ix++;
}
//End Check Array Remove Empty Key
print_r($ax);//Print Array After remove Empty Key
pour quiconque cherche à nettoyer une variable qui est un tableau simple ou un tableau multidimensionnel (tableau imbriqué avec une profondeur inconnue) voici ma solution proposée: (il est créé comme une fonction statique dans une classe, mais peut aussi en dehors de la classe -> juste enlever self::)
public static function clean($Array, $Strict=true)
{
if( ! is_array($Array))
{
return $Array;
}
$cleaned = array ();
foreach ($Array as $key => $value)
{
if($Strict)
{
if(!empty($value))
{
$tmp = self::clean($value,$Strict);
if(!empty($tmp))
{
$cleaned[$key] = $tmp;
}
}
}//strict
else
{
if(is_array($value))
{
if(!empty($value))
{
$tmp = self::clean($value,$Strict);
if(!empty($tmp))
{
$cleaned[$key] = $tmp;
}
}
}
elseif(strlen($value) > 0)
{
$tmp = self::clean($value,$Strict);
if(strlen($tmp) > 0)
{
$cleaned[$key] = $tmp;
}
}
}//not strict
} //end foreach
return $cleaned;
}
j'Espère sauver quelqu'un moment :) Cheers
Vous devrez probablement modifier le code ci-dessous un peu.
foreach ($arr as $key => $value) {
if($value == "") {
unset($value[$key]);
}
}