如何在PHP7中从嵌套的include文件中打破while循环?

如何在PHP7中从嵌套的include文件中打破while循环?,php,mysql,Php,Mysql,我有一个while循环,当它循环遍历Mysql记录时,它包含几个复杂的函数。一个更简单的任务是检查变量$city是否有一个ñ符号,如果$city包含一个ñ符号,则需要跳过MySql记录,但对于其余的MySql记录,循环需要继续 在过去,我对此使用了“break;”,但我收到了以下错误: PHP致命错误:“中断”不在“循环”或“切换”上下文中 我已经读到我应该使用“return false;”,但是这似乎也不起作用 非常感谢您的帮助 test.php <?PHP $query = "SEL

我有一个while循环,当它循环遍历Mysql记录时,它包含几个复杂的函数。一个更简单的任务是检查变量$city是否有一个ñ符号,如果$city包含一个ñ符号,则需要跳过MySql记录,但对于其余的MySql记录,循环需要继续

在过去,我对此使用了“break;”,但我收到了以下错误:

PHP致命错误:“中断”不在“循环”或“切换”上下文中

我已经读到我应该使用“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;
}

?>
<?PHP

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

?>

为什么要在循环中包含其他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";
}
?>

如果找到特殊字符,这将中断迭代

$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";
}

如果您只想跳过一个城市,则应使用
继续
,而不是
中断
<代码>继续转到下一个循环迭代,
中断
完全结束循环

但是,这些语句必须位于循环体内部,不能位于它调用的函数或包含文件中

您可以做的是将include文件设置为一个变量,然后检查它

test_function.php

<?PHP

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

?>
<?PHP

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

?>


php

您是否需要该逻辑部分(
if(strpos($city,“ñ”)…
)在你的项目中的任何其他地方?你不能从IF中断。你只能从FOR.PHP7 change中断。我认为
continue
可以做到这一点,但我不确定我是否同意@Tschitsch,好像第一个
$city
包含一个ñ,
break
将阻止后面所有的城市被关闭checked@HoldOffHunger他想做生意从
而不是
,这是允许的。如果
,你永远不能从
中断,这不是一个新的变化。在我的真实脚本中,这个循环上面还有其他条件,test_function.php根据这些条件并不总是相同的。我以上面硬编码的test_function.php为例。通常情况下,是这样的“需要$some_函数";基本上,有时añ是可以的,但有时它并不取决于这个示例循环上面的条件。你可以在if语句中使用
return
,但我想知道为什么他会在while循环中使用
require
,什么会触发缓慢的随机磁盘i/O。在这种情况下,速度不是问题。它不是前端web脚本。它是这是一个用于后端图形渲染服务器进程的脚本。与我的渲染时间相比,需要文件的任何速度损失都是最小的。是的!这非常有效。谢谢您的帮助。@RaymondNijland在第一次
包含
之后,文件将已经在内存中,因此它不会每次都使用磁盘I/O。
<?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";
}

?>