我想增加一个数组的值,它可能还不存在。
$array = [];
$array['nonExistentYet']++; // Notice
问题
这会导致NOTICE。
试图
我找到了一种方法来做到这一点,但它有点笨拙:
$array = [];
$array['nonExistentYet'] = ($array['nonExistentYet'] ?? 0) + 1;
问题
有没有更人类可读/优雅的方式来做到这一点?
我想增加一个数组的值,它可能还不存在。
$array = [];
$array['nonExistentYet']++; // Notice
问题
这会导致NOTICE。
试图
我找到了一种方法来做到这一点,但它有点笨拙:
$array = [];
$array['nonExistentYet'] = ($array['nonExistentYet'] ?? 0) + 1;
问题
有没有更人类可读/优雅的方式来做到这一点?
好吧,我想一种更易读的方法是if..else
用作,
$arr = [];
if(array_key_exists('nonExistentYet', $arr)) {
$arr['nonExistentYet'] += 1;
}
else {
$arr['nonExistentYet'] = 1;
}
如果经常使用这个,你可以定义一个小助手方法,它也使用了一个有趣的副作用......
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']++;
一般来说,抑制警告或错误消息是不好的!
你问的有点模糊,要么变量存在并且你增加它,要么在这种情况下它不存在你创建它。在另一种情况下,假设您想在 for 循环中执行此操作,在这种情况下您不必担心变量的存在。
一种方法是三元运算符,它检查数组值是否存在:
$array['iDoNotExistYet'] = empty($array['iDoNotExistYet']) ? 1 : ++$array['iDoNotExistYet'];
另一个只是将其重写为if
和else
条件。