PHP Undefined Index / Undefined Offset解决方法

时间:2012-08-20 15:34:20

标签: increment php

  

可能重复:
  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?

定义每一个

5 个答案:

答案 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()或类似值来评估它