如何遍历此数组并删除所有空值:
[28] => Array
(
[Ivory] =>
[White] =>
)
[29] => Array
(
[Ivory] =>
[White] =>
)
[30] => Array
(
[Ivory] =>
[White] => 36
)
[31] => Array
(
[White] => 24
)
所以说它会删除28,29而只是从30中删除象牙......
谢谢!
答案 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]);
}
}