PHP 在增量之前初始化多元数组

PHP initialize multimensional arrays before increment

提问人:Alberto Lancellotti 提问时间:1/26/2023 更新时间:1/30/2023 访问量:36

问:

我必须在一个旧的 php 项目中执行一个大的代码修复。 问题如下:我有许多语句,其中代码试图将整数添加到未初始化的多元数组中,如下所示:

$array_test['first']['two']['three'] += 10;

但是$array_test是这样声明的:

$array_test = array();

这种情况在项目中给了我很多警告,因为这个 Code Pattern 发生了 16k 次。

有什么方法可以解决这个问题,比如添加这样的语句:

if (!isset($array_test['first']['two']['three'])) 
{
         $array_test['first']['two']['three']=0;
}

然后

$array_test['first']['two']['three'] += 10;

但是我想只在一行代码中完成它(对于语句、if isset 和 increment),以便在我的项目中进行大而安全的替换。

有人可以帮我吗? 谢谢,对不起我的英语。

PHP 数组警告 声明 维缩放

评论

0赞 dazed-and-confused 1/27/2023
你走在正确的轨道上,但你看得太远了。 甚至还没有设置,但你正在检查几种方式。一切都需要一步一步地初始化。 然后等等。一旦声明了所有级别,那么你可以初始化为 0,你应该可以工作。isset$array_test['first']$array_test['first'] = array();$array_test['first']['two'] = array();$array_test['first']['two']['three']=0;+=
0赞 mickmackusa 1/27/2023
我不同意上述评论。您不需要实例化所有父级别。看看我的答案。

答:

1赞 mickmackusa 1/27/2023 #1

PHP 还没有(可能永远不会)有一个“空合并加法运算符。

从 PHP7.0 开始,您可以通过将 null 合并到 0 来避免调用。演示isset()

$array_test['first']['two']['three'] = ($array_test['first']['two']['three'] ?? 0) + 10;

如果低于 PHP7(一直到至少 PHP4.3),则可以使用内联(三元)条件。演示

$array_test['first']['two']['three'] = (isset($array_test['first']['two']['three']) ? $array_test['first']['two']['three'] : 0) + 10;

评论

0赞 Alberto Lancellotti 1/30/2023
谢谢!这个版本是否也与 PHP 7 <版本兼容?
0赞 mickmackusa 1/30/2023
空合并算子诞生于 PHP7。如果你的老板不愿意升级到受支持的PHP版本,那么你就要辞职,找一份可以培养现代编程技能的工作。