我正在研究另一个开发人员的旧代码,并且有大量的注意事项:使用+ =运算符设置数据时未定义的索引错误。基本上,索引尚未在数组中设置,因此会生成错误。
示例:
$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件这样的事情需要改变。是否值得编写所有这些陈述或是否有更好的方法我不知道?
编辑:我应该注意,数组索引并不总是相同,有时候没有设置,所以我不能在这种情况下预设索引以避免错误。
答案 0 :(得分: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
}
答案 1 :(得分:1)
如果您使用的是 PHP 7 及更高版本,您可以使用 the Null Coalescing Operator 使此代码更简洁。
$myArray = [];
$myValue = 1;
for ($i = 1; $i <= 10; $i++)
{
$myArray['test'] = $myValue + ($myArray['test'] ?? 0);
}
这里的好处不仅是代码更简洁,而且您还可以更明确地说明默认值 (0
)
答案 2 :(得分:0)
陈旧/不推荐/不推荐,但最短的解决方案是
@$myArray['test'] += $myValue;