Как вырваться из цикла while из вложенного включаемого файла в PHP 7?

0

У меня есть цикл while, который включает в себя несколько сложных функций, поскольку он проходит через записи Mysql. Одной из наиболее простых задач является проверка переменной $ city для символа - и если в $ city есть символ - тогда запись MySql должна быть пропущена, но цикл должен быть продолжен для остальных записей Mysql.

Раньше я использовал "break"; для этого, но я получаю эту ошибку:

PHP Неустранимая ошибка: "перерыв" не в контексте "loop" или "switch"

Я прочитал, что должен использовать "return false"; вместо этого, но это, похоже, не работает.

Буду признателен за любую оказанную помощь.

test.php

<?PHP

$query = "SELECT * FROM Cities limit 5";
$result = mysqli_query($con, $query);

while($row = mysqli_fetch_assoc($result))
    {
    $city = $row['City'];
    $city = "ñ";  // I hardcoded for testing
    require "test_function.php";
    echo "I should not see this if there is a ñ within $city \n\n";
}

?>

test_function.php

<?PHP

if( strpos( $city, "ñ" ) !== false) {
    echo "City $city contains a ñ.  Skipping...\n\n";
        break;
}

?>
  • 0
    Вам нужна эта логическая часть ( if( strpos( $city, "ñ" )... ) где-нибудь еще в вашем проекте?
  • 0
    Вы не можете оторваться от IF. Вы можете только сломаться от FOR. PHP7 изменить.
Показать ещё 4 комментария
Теги:

3 ответа

1
Лучший ответ

Если вы просто хотите пропустить один город, вы должны использовать continue, а не break. по- break continue идет к следующей итерации цикла, break полностью завершает цикл.

Однако эти утверждения должны находиться внутри тела цикла, они не могут быть в функции, которую он вызывает, или в файле include.

Что вы можете сделать, так это включить файл include в переменную и проверить это после него.

test_function.php

<?PHP

if( strpos( $city, "ñ" ) !== false) {
    echo "City $city contains a ñ.  Skipping...\n\n";
    $skip_city = true;
} else {
    $skip_city = false;
}

?>

test.php

  • 0
    Вы можете использовать return в операторах if ... Но мне интересно, почему он использовал в цикле while require которое будет запускать произвольный дисковый ввод-вывод, который идет медленно.
  • 0
    Скорость не является проблемой в этом случае. Это не интерфейс веб-скрипта. Это скрипт для серверного процесса графического рендеринга. Любая потеря скорости при запросе файла минимальна по сравнению с моим временем рендеринга.
Показать ещё 2 комментария
0

Почему вы включаете другой файл php в цикл? Примените условие в цикле, и оно будет выходить из цикла, если условие согласовано.

<?PHP

$query = "SELECT * FROM Cities limit 5";
$result = mysqli_query($con, $query);

while($row = mysqli_fetch_assoc($result))
    {
    $city = $row['City'];
    if( strpos( $city, "ñ" ) !== false) {
        echo "City $city contains a ñ.  Skipping...\n\n";
        break;
    }
    echo "I should not see this if there is a ñ within $city \n\n";
}
?>
  • 0
    На самом деле мой настоящий скрипт имеет другие условия над этим циклом, и test_function.php не всегда одинаков в зависимости от этих условий. У меня есть hardcode test_function.php выше в качестве примера. Обычно это «require $ some_function»; В принципе, иногда - нормально, но иногда это не зависит от условий выше этого примера цикла.
0

Это приведет к поломке итерации, если этот специальный символ найден

$query = "SELECT * FROM Cities limit 5";
$result = mysqli_query($con, $query);
$isCharFound = false;

while(($row = mysqli_fetch_assoc($result)) && ($isCharFound === false))
{
    $city = $row['City'];
    if( strpos( $city, "ñ" ) !== false) {
        echo "City $city contains a ñ.  Skipping...\n\n";
        $isCharFound = true;
        continue;
    }
    echo "I should not see this if there is a ñ within $city \n\n";
}

Если вы хотите пропустить только запись с особым символом

$query = "SELECT * FROM Cities limit 5";
$result = mysqli_query($con, $query);

while($row = mysqli_fetch_assoc($result))
{
    $city = $row['City'];
    if( strpos( $city, "ñ" ) !== false) {
        echo "City $city contains a ñ.  Skipping...\n\n";
        continue;
    }
    echo "I should not see this if there is a ñ within $city \n\n";
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню