内置PHP功能,这样做?

y2k*_*y2k 1 php

foreach($array as $key => $value)
        if (strlen($value) == 0)
    unset($array[$key]);
Run Code Online (Sandbox Code Playgroud)

有这么多内置数组函数,有没有这样做?

Pas*_*TIN 12

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

迭代输入数组中的每个值,将它们传递给回调函数.
如果回调函数返回true,则输入中的当前值将返回到结果数组中.
数组键被保留.

而且:

如果没有提供回调,则将删除所有输入等于FALSE (参见 转换为布尔值)的条目.


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

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

$array = array_filter($array);
var_dump($array);
Run Code Online (Sandbox Code Playgroud)

你会得到以下输出:

array
  'test' => string 'glop' (length=4)
  'a' => int 123
  'c' => string 'blah' (length=4)
Run Code Online (Sandbox Code Playgroud)

我没有使用回调函数,这意味着所有"空"值都被删除了 ;; 棘手的部分是,如果我输入了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);
Run Code Online (Sandbox Code Playgroud)

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

我们现在得到:

array
  'test' => string 'glop' (length=4)
  'a' => int 0
  'c' => string 'blah' (length=4)
Run Code Online (Sandbox Code Playgroud)

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