如果要检查一个PHP数组是否为空,如果为空,则将该特定键的值填充为默认值。

3
我需要读取一个PHP数组中的空值。如果任何键有空值,我只想用某个默认值填充它们(如果为空)。
1. 是否有内置函数可以检查数组是否为空并填充它? (或) 2. 实现此要求的步骤是什么?

array array_filter ( array $array [, callable $callback ] ) 回调是一个简单的函数,用于检查 empty(),它将为您提供一个键列表,其中包含空值作为结果数组,然后您可以填充。 - Dave
Dave,我们知道array_filter是用来删除空值的。只是想知道它是否能够列出空值的键。 - Neocortex
4个回答

6

array_map() 可以被用来对每个数组元素进行映射。

$array = array(1, 0, 'foo', '', 'bar', NULL);
$default = 'DEFAULT';

var_dump(
  array_map(
    function($value) use ($default) {
      return $value ?: $default;
    },
    $array
  )
);

1
+1 虽然您不应该在已经存在的变量上使用 empty。在这里使用 !$value 就足够了。 - deceze
1
你是对的,这允许使用 ?: 运算符。 - ThW
@deceze 为什么不是空的? - AlexP
匿名函数也是如此。 - ThW
显示剩余2条评论

3

没有内置函数可以用来替换空值。

您可以循环遍历数组,如果值为空,则填充它。

例如:

foreach($arr as &$val) {
    if(empty($val)) { $val = 'Empty'; }
}

不太确定为什么会被踩 - 能否详细说明一下? - Ryan
停止使用像这样的循环,这是因为 PHP 已经内置了可以完美解决这个问题的函数,你所说的“没有内置函数”是错误的。这种做法会浪费资源。 - Dave
2
@Dave 如果你所指的“内置函数”是array_map,那么看一下这篇文章。http://willem.stuursma.name/2010/11/22/a-detailed-look-into-array_map-and-foreach/ - “对于大数组,array_map()函数的峰值内存使用量可能是foreach循环的2.5倍。” “最快的是foreach结构。当循环内没有太多要做的事情时,这个结构可以比匿名函数快70%左右。” - Ryan
试着用一个有100k+条目的数组,然后再回来说这很高效。顺便提一下,我也不看好array_map。 - Dave
1
我甚至不想浪费时间证明这一点,因为我认为使用foreach循环而不是数组映射没有什么害处。我理解你的观点,在我有自己的确凿证据之前,我不会争论它,但我感到你只是在为了表达而表达,并不是真正的关注。 - Ryan
显示剩余4条评论

2
foreach($array as $key => value){
    if(empty($value)) $array[$key] = "Some random value";
}

1

Try this,

$ar=array(" ","test"," ","test2");
$ar = array_replace($ar,
array_fill_keys(
    array_keys($ar, " "),
    "hi"
)
);

为什么要“试一试”?为什么不解释你的答案是做什么的,为什么它是合适的,以及你如何知道单空格字符串是合适的目标? - mickmackusa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接