php删除空元素,但不要删除'0'

时间:2012-02-01 11:26:22

标签: php arrays

我想从数组中删除空元素。

我找到了这个代码:

$outaa = array_map('trim', $outaa);
$outaa = array_filter($outaa);

我的数组包含仅包含'0'的元素。 我的代码也删除了那些只有'0'的元素。 但我不想删除它们。

3 个答案:

答案 0 :(得分:1)

array_filters删除非严格意义上的空元素。即它将删除0,'',null,array()等

您必须使用执行严格比较的函数。我假设“empty”表示null,并且你有PHP 5.3+(使用闭包):

$outaa = array_filter($outaa, function($element) { 
    if($element !== null) return true;
});

或者,如果你没有5.3使用正常的回调:

function filter_empty($element) 
{ 
    if($element !== null) return true; 
} 
$outaa = array_filter($outaa, 'filter_empty');

答案 1 :(得分:1)

$outaa = array_remove_empty($outaa);


function array_remove_empty($arr){
        $narr = array();
        while(list($key, $val) = each($arr)){
            if (is_array($val)){
                $val = array_remove_empty($val);
                // does the result array contain anything?
                if (count($val)!=0){
                    // yes :-)
                    $narr[$key] = $val;
                }
            }
            else {
                if (trim($val) != ""){
                    $narr[$key] = $val;
                }
            }
        }
        unset($arr);
        return $narr;
    }

答案 2 :(得分:0)

单线总是很好。以下内容将从数组中删除所有空字符串NULLFALSE元素:

$clean_array = array_diff(array_map('trim', $my_array), array('', NULL, FALSE));

说明:

  • array_diff的第一个参数: $my_array的剪裁版本。使用array_map,通过trim函数从每个元素中修剪周围的空白。如果一个元素包含一个只有空格(即制表符,空格)的字符串,那么使用剪裁版本是件好事,我认为这也是想要删除的。如果你不想修剪元素,你可以很容易地使用$ my_array作为第一个参数。
  • array_diff的第二个参数:您要从$my_array中删除的项目数组。
  • 输出:第一个数组中包含的元素数组,这些元素也不包含在第二个数组中。在这种情况下,由于''NULLFALSE位于第二个数组中,array_diff永远不会返回它们。

修改

事实证明,您不需要在第二个数组中拥有NULLFALSE。相反,您可以拥有'',它的工作方式相同:

$clean_array = array_diff(array_map('trim', $my_array), array(''));