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!

10
demandé sur christian.thomas 2011-04-22 02:22:27

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).

4
répondu Ryan 2013-01-31 11:55:51

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));
37
répondu mfonda 2011-04-21 23:04:07

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.

1
répondu Felix Kling 2017-05-23 12:25:51
//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
0
répondu UniMe 2012-07-30 07:03:54

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

0
répondu Repky 2013-07-26 11:12:27

Vous devrez probablement modifier le code ci-dessous un peu.

foreach ($arr as $key => $value) {
  if($value == "") {
     unset($value[$key]);
  }
}
-1
répondu Pim Reijersen 2011-04-21 22:24:27