1

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

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

问题

这会导致NOTICE

试图

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

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

问题

有没有更人类可读/优雅的方式来做到这一点?

4

5 回答 5

2

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

$arr = [];
if(array_key_exists('nonExistentYet', $arr)) {
    $arr['nonExistentYet'] += 1;
}
else {
    $arr['nonExistentYet'] = 1;
}
于 2019-05-04T19:13:26.220 回答
2

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

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

给...

Array
(
    [nonExistentYet] => 1
)

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

于 2019-05-04T19:29:14.347 回答
1

我的标准实现是:

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

但这是我使用@运算符来抑制警告的罕见场景之一,但前提是我可以完全控制数组:

@$array['nonExistentYet']++;

一般来说,抑制警告或错误消息是不好的!

于 2019-05-04T20:26:36.827 回答
0

你问的有点模糊,要么变量存在并且你增加它,要么在这种情况下它不存在你创建它。在另一种情况下,假设您想在 for 循环中执行此操作,在这种情况下您不必担心变量的存在。

于 2019-05-04T19:14:42.413 回答
-1

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

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

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

于 2019-05-04T19:12:18.597 回答