UPDATE
Хорошо, теперь, когда вы разместили некоторый код, вот более конкретный ответ:
Если вы хотите иметь доступ к следующей строке в массиве, я предлагаю использовать обычный цикл for
для доступа к индексу:
for($i = 0; $i<count($audit); $i++) {
// $audit[$i] is current row
// $audit[$i+1] is next row
}
Но будьте осторожны, когда достигнете конца массива, так как $i+1
выйдет за пределы.
Или, если вам просто интересно, почему $i
в вашем текущем коде работает неправильно:
Вы должны увеличить его в конце цикла foreach
:
$i++;
UPDATE2
Более полный пример, чтобы прояснить ситуацию (я адаптирую ваш подход и проверяю предыдущий ряд)
for($i=0; $i<count($audit);$i++)
{
$curr = $audit[$i];
if($i>0) {
$prev = $audit[$i-1];
if($curr['operation'] == 'INSERT')
{
if($curr['table_name']!=$prev['table_name'])
{
$inserttable = "INSERT INTO '".$curr['table_name]."' (";
}
else {
// whereever $insertfield comes from
$insertfield .= "'".$curr['field']."', ";
$insertfield .= "]";
$insertfield = str_replace(", ]",")",$insertfield);
}
}
}
}
Поскольку вы вообще не указали, как вы подключаетесь к базе данных, вот общий ответ:
Укажите свой запрос, чтобы упорядочить набор результатов по идентификатору:
$query = "SELECT <columns here> FROM <table here> ORDER BY id";
Затем получите набор результатов (у нас есть фиктивный класс базы данных):
$result = $db->query($query);
Затем переберите набор результатов:
while($row = $result->next()) {
// do something with row
}