增加不存在的数组元素,恕不另行通知
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'];
另一个只是将其重写为 if
和 else
条件。
好吧,我想更易读的方法是使用 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']++;
一般情况下,抑制警告或错误信息是不好的!
我想增加一个可能不存在的数组的值。
$array = [];
$array['nonExistentYet']++; // Notice
问题
这导致 注意。
尝试
我找到了一种方法来做到这一点,但它有点 clunky:
$array = [];
$array['nonExistentYet'] = ($array['nonExistentYet'] ?? 0) + 1;
问题
是否有更人性化的 readable/elegant 方法来做到这一点?
一种方法是三元运算符,它检查数组值是否存在:
$array['iDoNotExistYet'] = empty($array['iDoNotExistYet']) ? 1 : ++$array['iDoNotExistYet'];
另一个只是将其重写为 if
和 else
条件。
好吧,我想更易读的方法是使用 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']++;
一般情况下,抑制警告或错误信息是不好的!