2010-02-27 59 views
1
foreach($array as $key => $value) 
     if (strlen($value) == 0) 
    unset($array[$key]); 

这么多内置的数组函数,那么有没有这样做?建立在PHP功能,这样做?

+0

您应该定义“this”的含义。 – pixeline 2010-02-27 09:37:26

+0

[根据数组的值从数组中删除元素]的可能重复(http://stackoverflow.com/questions/2169669/remove-element-from-array-based-on-its-value) – Gordon 2011-11-17 10:00:18

回答

12

我想你可以使用array_filter,做那种事(引用)

迭代在每个值的输入 阵列将它们传递给回调 功能。
如果回调函数 返回true,则将当前值从 输入返回到结果 数组中。
保存数组键。

和:

如果没有回调被提供时,所有 条目输入的等于FALSE(见 converting to boolean将 移除。


例如,使用类似的代码,这部分:

$array = array(
    'test' => 'glop', 
    'a' => 123, 
    'b' => '', 
    'c' => 'blah', 
    'd' => '', 
); 

$array = array_filter($array); 
var_dump($array); 

你会得到以下输出:

array 
    'test' => string 'glop' (length=4) 
    'a' => int 123 
    'c' => string 'blah' (length=4) 

我没用过一个回调函数,这里 - 这意味着所有的“空”值已被删除 ;;如果我以0作为它的值,那么它会被删除......

根据你的情况,这是可以接受的或不是......所以,也许你更喜欢使用特定的回调函数来完成你想要的功能,并且更好地控制被滤除的内容?


而这里的一个回调函数的例子:

$array = array(
    'test' => 'glop', 
    'a' => 0, 
    'b' => '', 
    'c' => 'blah', 
    'd' => '', 
); 

function my_function($a) { 
    if ($a === '') { 
     return false; 
    } 
    return true; 
} 

$array = array_filter($array, 'my_function'); 
var_dump($array); 

(注意数组中的'a' => 0线)

而且我们现在得到:

array 
    'test' => string 'glop' (length=4) 
    'a' => int 0 
    'c' => string 'blah' (length=4) 

即使用回调函数允许我们使用以更清楚地指定应该过滤掉什么(这里,包含完全空字符串的行,没有类型转换)