可能重复:
PHP: “Notice: Undefined variable” and “Notice: Undefined index”
最近打开了错误,我正在捕获未增加的索引和未定义的偏移错误,我正在递增到新的数组索引。
这是一个非常基本的例子。
for($i = 0; $i<10; $i++)
{
$arr['var1'] += $val1[$i];
$arr['var2'] += $val2[$i];
}
我收到错误,因为在第一次迭代时没有设置$ arr ['var1']。
我发现两者都检查索引已设置
if (!isset($arr['var1'])) {
$arr['var1'] = 0;
}
$arr['var1'] += $val1[$i];
•和•
在递增forloop之前自动设置值为0的索引都会停止错误消息。
我的问题是我要解决其中的大约150个,这是解决这个问题的最佳方法。 检查每一个,或者事先用val值0?
定义每一个答案 0 :(得分:3)
您应始终初始化您的变量。这绝对是几乎所有语言的最佳实践,并且它被认为是访问未设置变量的极端习惯。您应该始终在 on 上开发错误的软件。
您的代码应为:
$arr['var1'] = $arr['var2'] = 0;
for($i = 0; $i<10; $i++)
{
$arr['var1'] += $val1[$i];
$arr['var2'] += $val2[$i];
}
点击,修复此问题的所有150次,然后从错误中吸取教训。下次正确编写代码。
答案 1 :(得分:1)
这是个人偏好,因为任何一种选择都会产生相同的功能。但是,提前声明它将为您节省条件和函数调用(这将在循环中重复),因此从效率的角度来看,最好在循环之前声明它。通常,最佳做法是在使用变量之前声明变量。但是,PHP可以让你逃避这样的事情,这就是为什么它不是必需的。
答案 2 :(得分:1)
首先初始化,然后迭代:
$arr['var1'] = 0;
$arr['var2'] = 0;
for($i = 0; $i<10; $i++)
{
$arr['var1'] += $val1[$i];
$arr['var2'] += $val2[$i];
}
这是更易读的代码 - 比你一直在做的更好的练习。
如果你必须初始化一个包含许多计数器的数组,你可能会这样做:
$arr = array('counter1' => 0, 'counter2' => 0, 'counter3' => 0);
答案 3 :(得分:1)
如果您通过引用访问它们,则数组条目将会生成(自动生成)。因此:
for($i = 0; $i < 10; $i++) {
$var1 =& $arr['var1'];
$var2 =& $arr['var2'];
$var1 += $val1[$i];
$var2 += $val2[$i];
}
即使数组本身也不需要声明。默认情况下,新条目的值为NULL,在添加时将转换为0.
答案 4 :(得分:0)
你应该修复这些方面,只是为了良好的编码实践。您采用的方法实际上取决于您的代码。如果您真正使用新变量,那么只需将它们定义为false,0,''或任何有意义的变量作为相关变量的默认值。
如果您在代码中某个位置可能有或没有值集(例如评估$ _POST或$ _GET数组),那么请使用isset()
,empty()
或类似值来评估它