PHP未定义的偏移量:在比较循环中为-1


PHP Undefined offset: -1 in comparison loop

我收到此错误未定义的偏移量:-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[ayear][i-1]相同。如果不同,则打印出格式化的<TR>。

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

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

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

"未定义的偏移"几乎总是一个错误,罪魁祸首是:

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

如果$i == 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.
}