如何使用PHP在嵌套的if-else条件下继续外部while循环?

时间:2016-05-22 14:18:31

标签: php while-loop

我有一段代码如下:

while ( $conver = mysqli_fetch_assoc($converQ)) // for each conversation
{
    $group_mark = array();

    if ($conver['send_from'] == 1)  // send from group
    {  
        if (in_array($conver['sender_id'], $group_mark)) 
        {
            continue;
        }
        else
        {
            array_push($group_mark, $conver['sender_id']);
        }
     ...

while-loop的开头,我必须检查对话是来自群组还是个人。如果它来自组,我应该检查id是否已经出现。但是现在continue无法停止在while-loop中执行以下代码并开始下一个循环。我认为原因是它的外部函数是if-else而不是直接while-loop。你能告诉我如何编辑代码来做我想要的吗?提前谢谢!

编辑:

我试过这个:continue 2但它不起作用。为什么呢?

感谢@ThinkingMedia,我知道现在的问题是什么。我把$group_mark放在了错误的地方。遗憾。

3 个答案:

答案 0 :(得分:1)

在这些您要停止检查其他行的情况下,您可以开发一个函数并在您需要的位置返回true:

function check()
{
    while ( $conver = mysqli_fetch_assoc($converQ)) // for each conversation
    {
     $group_mark = array();

     if ($conver['send_from'] == 1)  // send from group
     {  
         if (in_array($conver['sender_id'], $group_mark)) 
         {
            return true;
         }
         else
         {
             array_push($group_mark, $conver['sender_id']);
         }
     }
   }
 }

答案 1 :(得分:1)

你的代码是对的。但是继续不会跳过那些if/else语句。

在php docs中,他们说已弃用:continue {var}

  

5.4.0删除了传入变量(例如$ num = 2; continue $ num;)作为数字参数的能力。

您可以按如下方式修改代码:

while ( $conver = mysqli_fetch_assoc($converQ)) // for each conversation
{
    $group_mark = array();

    if ($conver['send_from'] == 1)  // send from group
    {  
        if (!in_array($conver['sender_id'], $group_mark)) {
            array_push($group_mark, $conver['sender_id']);
        }
    }
    ...
}

答案 2 :(得分:0)

发现了一些有趣的,好奇为什么你的$ group_mark = array();在while循环中。看起来这会被覆盖并且无法达到if条件,因为group_mark总是空数组。

尝试将此移至while循环之前。这应该解决并得到你需要的东西。