如何将数组值与数组中的下一个值进行比较

时间:2013-12-06 15:54:20

标签: php arrays

我想将数组中的下一个值与当前值进行比较。如果你查看我的代码,我想你会看到我想要做的但是要解释我只需要一张图片来显示$ row [2]在下一个循环中是否相同。

我的错误始于//错误,请参阅以下代码中的if语句。

我确信有一个简单的解决方案,但我不知道正确的名称,在我的搜索中找不到它。 -Disclaimer我还是新手,请原谅我。

$connection = mysqli_connect($host, $user, $pass, $db);
if (mysqli_connect_errno($connection)) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// create query
$query = "SELECT * FROM 1098";
$result = mysqli_query($connection, $query);


if (mysqli_num_rows($result) > 0) {

    while($row = mysqli_fetch_row($result)) {
        echo "<center>";

        // ERROR HERE in if Statement
        $nextrow = 1 + $row;
        if ( $row[2] <> $nextrow[2]){

            if ( $row[6] == "kit"){
                $img ='<img style="width: 700px; height: 800px;" alt="Picture Not Found" src=" ';
                $file = substr($row[2], -3);
                $filepath='files/'.$row[6].'/'.$file.'_files/image001.png">';
                echo $img.$filepath;
            }
            else
            {
                $img ='<img style="width: 700px; height: 280px;" alt="Picture Not Found" src=" ';
                $filepath='files/'.$row[6].'/'.$row[2].'_files/image001.png">';
                echo $img.$filepath ;
            }
        }
        echo  "</center>";
    }
}

2 个答案:

答案 0 :(得分:1)

$nextrow = 1 + $row没有意义。这将尝试将一个整数添加到数据库记录,即1 + array('foo', 'bar', 'baz')

如果您只想将当前记录与之前的记录进行比较(在第一个记录之后的所有循环上),请执行以下操作:

while($row = mysqli_fetch_row($result)) {
  print '<center>';

  // If there is no previous record set (first record) or if the 2nd value is different.
  if (!isset($prev_record) || $prev_record[2] != $row[2]) {
    // ...        
  }

  print '</center>';

  // Assign the current row to a variable so that it's available on the next run.
  $prev_record = $row;
}

编辑 - 这是一个如何将所有记录放入单个数组然后使用它们的示例:

$records = array();
while($row = mysqli_fetch_row($result)) {
  $records[] = $row;
}

foreach ($records as $i => $record) {
  $record; // current record
  $records[$i-1]; // last record
  $records[$i+1]; // next record
}

我建议将数据拆分为多个表格,并使用更简洁的方法。

答案 1 :(得分:0)

$ nextrow = 1 + $ row; 鉴于$ row是一行,这不是你想象的那样。

如果你想要查询中的nextrow,你必须获取它。

如果您可以反转逻辑以使用上一行,则可以将其保留并将其与当前行进行比较。

你可以先将它们全部读入一个数组,但是在一个很昂贵的结果集上......

你可以做两次抓取,一次到当前行,一次到下一行,

然后添加大量逻辑来处理第一个和最后一个,并使current = next并获取下一个下一个:(

或者您可以重新编写查询,以便在一行中返回所需的数据。

你绝对不能做你想做的事。在您获取之前没有下一行。 $ row是一个列数组,没有行数组中的行。