PHP-将数组中的所有空或null设置为0,不使用foreach循环


PHP - set all empty or null in an array, to 0, without a foreach loop

我正在处理一个大数组。我们用一个表显示数组中的所有数据字段。数组中的某些字段为null,因为用户没有在该字段中累积任何内容。然而,当他们有这样的结果时,我们想要一个零。我们的解决方案是将值与intval()一起显示

intval(@$users[$user_id]['loggedin_time'])

这很好,但又丑陋又不雅。有没有一种方法可以在不使用foreach循环的情况下将数组中"的所有值设置为0?

是,带有array_map:

$input = array(...);
$output = array_map(function($item) { return $item ?: 0; }, $input);

上面的例子使用了PHP>=5.3的功能(内联匿名函数声明和三元运算符的缩写),但在任何PHP版本中都可以这样做(只是可能更详细)。

您应该考虑一下回调函数内部的条件;我在这里使用的这个将把所有计算为false的值替换为零的布尔值(这确实包括空字符串,但它也包括例如null值——所以你可能想根据需要调整条件)。

更新:PHP<5.3版本

要么是这个:

function callback($item) {
    return $item == false ? 0 : $item;
}
$output = array_map('callback', $input);

或者这个:

$output = array_map(
     create_function('$item', 'return $item == false ? 0 : $item;'),
     $input);

我假设您正在从某种数据库中检索这些信息。

如果您要从Mysql表中获取数组,请尝试以下操作:http://forums.mysql.com/read.php?20,3657936579#msg-36579