2

我正在处理另一个开发人员的旧代码,并且有大量的注意:使用 += 运算符设置数据时出现未定义的索引错误。本质上,索引尚未在数组中设置,因此会生成错误。

例子:

$myArray = array();
$myValue = 1;
for ($i = 1; $i <= 10; $i++) 
{
    $myArray['test'] += 1;
}

由于尚未设置测试索引,将在第一次运行时产生错误。

我知道我可以使用以下代码删除此错误:

$myArray = array();
$myValue = 1;
for ($i = 1; $i <= 10; $i++) 
{
    if ( ! isset($myArray['test']) )
    {
        $myArray['test'] = $myValue;
    } 
    else 
    {
        $myArray['test'] += $myValue;
    }
}

但是,大约有 50 个这样的事情需要改变。是否值得写所有这些 isset 语句,还是有更好的方法我不知道?

编辑:我应该注意,数组索引并不总是相同的,有时没有设置,所以我不能在这种情况下预设索引以避免错误。

4

3 回答 3

5

这有点短,但如果你有很多编辑,可能还是有点复杂。

$myArray = array();
$myValue = 1;
for ($i = 1; $i <= 10; $i++) 
{
    isset($myArray['test']) ? $myArray['test'] += $myValue : $myArray['test'] = $myValue;

}

您还可以编写一个全局函数(未测试)..

$myArray = array();   
$myValue = 1;
for ($i = 1; $i <= 10; $i++) 
{
    increment($myArray['test'], $myValue);
}

function increment(&$var, $inc){
    $var = isset($var) ? $var += $inc : $var = $inc
}
于 2012-11-01T20:22:20.037 回答
2

如果您使用的是 PHP 7 及更高版本,则可以使用Null Coalescing Operator使此代码更清晰。

$myArray = [];
$myValue = 1;
for ($i = 1; $i <= 10; $i++) 
{
    $myArray['test'] = $myValue + ($myArray['test'] ?? 0);
}

这里的好处不仅是代码更干净,而且您还可以更明确地了解默认值 ( 0)

于 2021-03-19T02:39:13.437 回答
0

旧的/不推荐的/不推荐的,但最短的解决方案是

@$myArray['test'] += $myValue;
于 2017-02-24T11:44:47.183 回答