增加不存在的数组元素,恕不另行通知

Incrementing not existing element of array without notice

我想增加一个可能不存在的数组的值。

$array = [];
$array['nonExistentYet']++; // Notice

问题

这导致 注意

尝试

我找到了一种方法来做到这一点,但它有点 clunky:

$array = [];
$array['nonExistentYet'] = ($array['nonExistentYet'] ?? 0) + 1;

问题

是否有更人性化的 readable/elegant 方法来做到这一点?

一种方法是三元运算符,它检查数组值是否存在:

$array['iDoNotExistYet'] = empty($array['iDoNotExistYet']) ? 1 : ++$array['iDoNotExistYet'];

另一个只是将其重写为 ifelse 条件。

好吧,我想更易读的方法是使用 if..else 作为,

$arr = [];
if(array_key_exists('nonExistentYet', $arr)) {
    $arr['nonExistentYet'] += 1;
}
else {
    $arr['nonExistentYet'] = 1;
}

你问的有点模糊, 变量存在并且您递增它,或者在您创建它的情况下它不存在。 另一种情况假设你想在for循环中进行,在这种情况下你不必担心变量的存在。

如果经常使用这个,你可以定义一个小辅助方法,它也使用了一个有趣的副作用...

function inc(&$element) {
    $element++;
}
$array = [];
inc($array['nonExistentYet']);
print_r($array);

给...

Array
(
    [nonExistentYet] => 1
)

没有警告。 如您所见,该函数将参数定义为 &$element,如果该值不存在,则会创建它,因此函数调用本身将创建该元素,然后它只会递增它。

我对此的标准实现是:

if (isset($array['nonExistentYet']))
   $array['nonExistentYet']++;
else
   $array['nonExistentYet'] = 1;

但这是我使用 @ 运算符抑制警告的罕见情况之一,但前提是我对数组具有完全控制权:

@$array['nonExistentYet']++;

一般情况下,抑制警告或错误信息是不好的!