foreach($array as $key => $value)
if (strlen($value) == 0)
unset($array[$key]);
有如此多的内置数组函数,那么有没有这样做呢?
答案 0 :(得分: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)
即。 使用回调函数可以让我们更清楚地指定应该过滤掉的内容 (这里,包含完全空字符串的行,没有类型转换)。