【问题标题】:PHP initialize multimensional arrays before incrementPHP在递增前初始化多维数组
【发布时间】:2023-01-27 08:53:03
【问题描述】:

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

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

$数组测试声明如下:

$array_test = array();

这种情况在项目中给了我很多警告,因为这种代码模式发生了 16k 次。

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

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

然后

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

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

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

【问题讨论】:

  • 您走在正确的轨道上,但您的isset 看得太远了。 $array_test 甚至还没有设置 ['first'],但您正在检查几种方式。一切都需要一步一步来。 $array_test['first'] = array(); 然后是 $array_test['first']['two'] = array(); 等等。一旦声明了所有级别,您就可以初始化为 0 $array_test['first']['two']['three']=0; 并且您的 += 应该可以工作。
  • 我不同意上面的评论。您不需要实例化所有父级别。看我的回答。

标签: php arrays warnings declaration multi-dimensional-scaling


【解决方案1】:

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

您可以通过将 null 合并为 0 来避免 isset() 调用。Demo

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

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 2015-08-01
    • 1970-01-01
    • 2013-04-04
    • 2011-04-03
    • 2015-07-20
    相关资源
    最近更新 更多