PHP- 如何解决嵌套foreach循环中的else

PHP- How to solve else in nested foreach loop

这是我的代码语法,所有条件都有效,但最后一个无效。我在那里 找到了解决方案,我用过 break 2 但仍然无法正常工作。我该如何解决?

<?php
$rows = $wpdb->get_results( "SELECT * FROM test WHERE approve_status = '1'" );

if($rowcount>0)
{
    foreach ($rows as $row)
    { 
        if ( is_user_logged_in() ) 
        {
            echo 'I am user';
            $demo = $wpdb->get_results("SELECT * FROM abc WHERE user_mail = '$curentmail'");

            foreach($demo as $demos)
            {

                if(!empty($demos->id)){
                    echo 'I am IF';
                     break 2;
                }

                else{
                    echo  'I am last ELSE';
                }
            }
        }
        else{
            echo 'I am guest user';
        }
    }
}

因为中断不会中断 if。你只需要打破 foreachs 一次,所以它只是 break;

else 实际上不是 运行,因为 if 不是假的。如果它在 ifs 中使用 break,则根本不会 运行。只有最里面的 else 运行s,如果 $demos 的第一个 id 是空的。第二个仅当用户未登录时。这些与 foreach 循环没有太大关系。

你在错误的地方做 else,应该做而不是 foreach...

   $demo = $wpdb->get_results("SELECT * FROM abc WHERE user_mail = '$curentmail'");

    if(!empty($demo)){
        foreach($demo as $demos)
        {
            echo 'I am IF';
        }
    }
    else{
        echo  'I am last ELSE';
    }

所以逻辑是,如果没有返回任何记录,则显示您的消息。

在函数中移动整个 foreach 块,并在需要时 return 从中移出。例如:

if($rowcount>0)
{
    doStuff($rows);
}

function doStuff($rows) {
    global $wpdb, $curentmail;

    foreach ($rows as $row)
    { 
        if ( is_user_logged_in() ) 
        {
            echo 'I am user';
            $demo = $wpdb->get_results("SELECT * FROM abc WHERE user_mail = '$curentmail'");

            foreach($demo as $demos)
            {

                if(!empty($demos->id)){
                    echo 'I am IF';
                    return;
                }

                else{
                    echo  'I am last ELSE';
                }
            }
        }
        else{
            echo 'I am guest user';
        }
    }
}