PHP Undefined offset:比较循环中的-1

时间:2012-08-22 14:07:34

标签: php

我收到此错误未定义的偏移量:-1。

我很确定这是因为我将数组索引的值与前一个索引的值进行比较,所以在第一次迭代时它失败了,因为没有-1索引。

for ($i=0; $i<$rows_n; $i++) 
{
    formatTR($i, $rows, 'YEAR');
}


// Function
function formatTR($i, $rows, $year) 
{

    if ($rows[$year][$i] != $rows[$year][$i-1] ) {
        print "<tr class='header-year-tr'><td colspan='2'>{$rows[$year][$i]}</td></tr>";
    }

    print "<tr>";
}

该函数检查$ rows [year] [i]的先前值是否与之前的$ rows [year] [i-1]相同。如果它不同,它会打印出格式化的&lt; TR&gt;。

似乎是一种避免此错误的方法,首先要检查$ i的值是否为零,但我想知道是否还有其他方法。可能在我的if条件中。

3 个答案:

答案 0 :(得分:1)

我认为最简单的方法是检查$ i> 0

if ($i > 0 && $rows[$year][$i] != $rows[$year][$i-1] ) {
  // ...
}

答案 1 :(得分:0)

“Undefined offset”几乎总是一个一个错误,这就是罪魁祸首:

if ($rows[$year][$i] != $rows[$year][$i-1] ) {
-------------------------------------^^^^

如果$i == 0

,请确保永远不要调用此行

答案 2 :(得分:0)

function formatTR($i, $rows, $year) 
{
    if($i > 0){
        if ($rows[$year][$i] != $rows[$year][$i-1] ) {
        print "<tr class='header-year-tr'><td colspan='2'>{$rows[$year][$i]}</td></tr>";
        }
    }
    print "<tr>"; //not sure why you have this here.

}

如果您希望$rows[$year][0]打印<tr>

function formatTR($i, $rows, $year) 
{
    if($i > 0){
        if ($rows[$year][$i] != $rows[$year][$i-1] ) {
          print "<tr class='header-year-tr'><td colspan='2'>{$rows[$year][$i]}</td></tr>";
        }
    } else {
        print "<tr class='header-year-tr'><td colspan='2'>{$rows[$year][$i]}</td></tr>";
    }
    print "<tr>"; //not sure why you have this here.

}