PHP数组 - 删除空值

时间:2011-04-21 22:22:27

标签: php arrays

如何遍历此数组并删除所有空值:

[28] => Array
    (
        [Ivory] => 
        [White] => 
    )

[29] => Array
    (
        [Ivory] => 
        [White] => 
    )

[30] => Array
    (
        [Ivory] => 
        [White] => 36
    )

[31] => Array
    (
        [White] => 24
    )

所以说它会删除28,29而只是从30中删除象牙......

谢谢!

6 个答案:

答案 0 :(得分:38)

我看到你已经有了一个有效的解决方案,但只是为了好玩,有了array_map的优点:

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

答案 1 :(得分:4)

我相信这会做你想要的:

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 ] );
}

它将循环遍历您的外部数组,下降到它包含的任何数组,并删除其值为空的键。然后,一旦完成,它将从外部数组中删除其子值全部为空的任何键。

请注意,它不适用于通用数组,只是您提供的数组(二维)。

答案 2 :(得分:1)

另一种方法,使用preg_grep

foreach($array as $key => $subarray) {
    $array[$key] = preg_grep('/^$/', $subarray, PREG_GREP_INVERT);
}

更新:忘了删除空数组。 @Ryan's answer中显示的技术也可以在这里应用。

答案 3 :(得分:0)

//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

答案 4 :(得分:0)

对于正在寻找清理变量的人来说,这是一个简单的数组或多维数组(深度未知的嵌套数组),这是我提出的解决方案: (它在类中创建为静态函数,但也可以在类之外工作 - >只需删除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;
    }

希望节省一些时间:)干杯

答案 5 :(得分:-1)

您可能需要稍微编辑下面的代码。

foreach ($arr as $key => $value) {
  if($value == "") {
     unset($value[$key]);
  }
}