高级PHP foreach()循环..(嵌套if / else)

时间:2014-08-15 16:36:36

标签: php loops foreach break

我在这里有一点脑屁......哈哈

我最初为此使用了一个forloop()但是后来条件在我需要检查的事情上得到了更多进展,以及基于找到/未找到的输出..

我的问题是确保在连续的循环中......(无访问)药水上的'else'只会回显一次......但是当然在每个'循环'它将从顶部检查,如果不是匹配输出'no-access'文本..(在每次迭代时)..它应该只输出一次。

最初在foreach()循环中只有几个if()语句/检查..其中一个简单的中断;照顾好事......

但是这些if()变成了if / else ..这意味着else会在下一个'循环'上被'触发'..如何防止这种情况?

$arrwebinars = ("Name1", "Name3");

foreach($arrwebinars as $webinar) {

   /* Webinar 1 */
   if($webinar == 'Name1') {    
        if($web01_title != '') {
            echo "available";                   
        } else {
            echo "not available";
        }
  } else {
    echo "no access";
  } 

  /* Webinar 2 */
  if ($webinar == 'Name2') {    
     if ($web02_title != '') {
        echo "available";                   
     } else {
        echo "not available";
     }
  } else {
     echo "no access";
  }

  /* Webinar 3 */
  if ($webinar == 'Name3') {    
    if($web03_title != '') {
        echo "available";                   
    } else {
        echo "not available";
    }
  } else {
    echo "no access";
  }
}

还有其他一些'控制'我可以用来确保主if / else只执行一次吗?

抱歉,我很难描述这个,希望代码解释一切(和问题)

感谢。


更新: 当前状态:恢复为foreach()循环。

用户仅获得2个vids的授权(#5&#6我们会说......实际上可以是6个中的任何一个)

在第一次循环/迭代时...视频1-4输出(无法访问你!)(因为它们不是,只有#5&#6如上所述)

没有。 5输出嵌入代码精细(访问)

没有。 6说'无法访问你'..(即使他们确实/应该有权访问)

在第二次迭代时..复制1-4重复,并再次说“无法访问你”(在它之外是重复......这是正确的)..但是,视频#5现在说“无法访问”为你“(首先循环它输出正常,第二循环它正在寻找一个新的'匹配',而不是我想要的...理论上这是正确的..但应该有一个重复的)

Vid#6现在正在输出嵌入代码(在第一个循环中没有输出)..

用户只购买了2个视频的访问权限..所以循环只发生两次。

但我得到'12'回声

无论我应该只获得6个回声,每个视频输出1个(可用/不可用 - 或 - 无访问权限)

我今天似乎无法绕过这个...... :(

目标我想实现:

6输出TOTAL

每个输出(回声)应该只有: 可用或不可用打印(这是空白标题的嵌套条件检查) -要么- 无法访问

有6个视频要检查。 用户可以购买1个或最多6个视频的访问权限

首先检查:是他们购买的阵列中的网络研讨会名称是在可用的总共6个视频中找到的

第二层条件检查: 如果是(匹配发现==访问)...然后检查标题是否丢失(如果有输出访问[视频嵌入代码] ...如果没有输出文本'尚不可用')

(回到第一次条件检查)如果没有访问(未找到匹配)..输出'无访问'文本。

如果我想在舞台/页面上重复,这是有效的..(但我不会!)大声笑..

我需要限制为仅6个输出,因为总共只有6个视频可用。

我不想要:

在循环1上输出vid#1的访问权限,#2-#6不能访问.. 在循环2上,它重新声明了所有这些输出,现在vid#1无法访问,vid#2有访问权限,vid#3-#6无法访问...

等等。循环继续。我迷失在这一个!...

谢谢!

2 个答案:

答案 0 :(得分:0)

不确定您要实现的目标,但您的代码可能会大大缩短。

$webinars = array('one', 'two', 'Name3');
$web0_title = 'not empty'; // Just a demo

for ( $i = 0; $i < count($webinars); $i++ )
{

    $access = FALSE;
    $available = FALSE;
    $name = 'Name' . $i;
    $title = 'web' . $i . '_title';

    if ( $webinars[$i] == $name ) {

        if ( ! empty( $$title ) ) {

            $available = TRUE;

        }

        $access = TRUE;

    }

    // Simple debug, not sure what you want to accomplish
    echo 'Webinar: ' . $webinars[$i] . ' <br />';
    echo 'Availability: ' . ( $available ? 'Available' : 'Not Available' ) . '<br />';
    echo 'Access: ' . ( $access ? 'Access' : 'No Access'  ) . '<br /><br />';

}

编辑:请阅读您的评论,以便我对其进行更新。

答案 1 :(得分:0)

如果您希望在遇到“无法访问”时停止考虑“行”,那么在每次无法访问后您只需continue;。或者你是否希望检查其他人,即使你在第一次遇到“无法访问”,只是在这种情况下无声地失败?