内置PHP功能,这样做?

时间:2010-02-27 09:16:07

标签: php

foreach($array as $key => $value)
        if (strlen($value) == 0)
    unset($array[$key]);

有如此多的内置数组函数,那么有没有这样做呢?

1 个答案:

答案 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)

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