проблема с разрывом при использовании его для разрыва вложенных циклов в php - PullRequest
1 голос
/ 28 сентября 2011

Когда я выполняю этот код:

$result = mysql_query("SELECT * FROM example_table");

$i = 0;
while ($row = mysql_fetch_array($result))
{
    for ($j = 0; $j < $c; $j++)
    {
        if ($db_array[$j]['ID'] == $row['id'])
        {
            $del_counter = 0;
            break 2;
        }
        else
        $del_counter = 1;
    }

    if ($del_counter == 1)
    {
    $del_array[$i] = $row['id'];
    $i++;
    }

}

Это не нарушает двухуровневую петлю. Вместо этого $ del_array хранит все идентификаторы строк. Мне нужно сравнить db_array [] [id] с массивом "row" (извлечено из базы данных). И нужно проверить, какие элементы db_array удаляются из базы данных. Итак, я попытался сохранить идентификаторы удаленных элементов в массиве. Но перерыв не работает. Я что-то пропустил?

Спасибо в ожидании.

BG

1 Ответ

2 голосов
/ 28 сентября 2011

Согласно руководству по PHP:

1) break ends execution of the current for, foreach, while, do-while or switch structure
2) break accepts an optional numeric argument which tells it 
how many (the above mentioned) nested enclosing structures are to be broken out of

Ваш перерыв на уровне 2, и, следовательно, break 2; должен работать, как и ожидалось, поэтому проблема в другом месте. break 2 выполняется вообще?

В любом случае, я бы порекомендовал более надежное решение, например,

$ok = True;
while (($row = mysql_fetch_array($result)) && $ok) {
      ...
      if (...) $ok = False;  // anywhere deep
      ...
      if ($ok) {...}
}
...