PHP如何跳转到循环开头?代码场景下的实现疑问
在PHP循环中如何跳转到循环开头忽略已处理项?
我有一段简化后的PHP代码:
$html = ""; $posts = $sth->fetch(PDO::FETCH_ASSOC); while ( $post = array_shift($posts) ){ if ( $post['deleted'] == true ){ /* 跳转到上方四行(while处)以忽略该已删除的帖子 */ } $html .= '<div class="content">' . $content . '</div>'; }
如注释里说的,我需要直接跳转到循环开头,忽略当前这个已删除的帖子。注:实际场景比较复杂,没法把$html .= ...放进else块,所以想问问PHP里有没有实现向上跳转的方式?
当然可以实现!PHP里专门有针对循环的跳转语句,完美解决你的需求:
- 使用
continue语句:这就是你要找的「跳转到循环开头」的方法。当代码执行到continue时,会直接跳过当前循环剩余的代码,回到循环的条件判断处(也就是你的while那一行),开始下一次循环。
把你的代码修改一下就行:
$html = ""; $posts = $sth->fetch(PDO::FETCH_ASSOC); while ( $post = array_shift($posts) ){ if ( $post['deleted'] == true ){ continue; // 直接跳回while循环开头,忽略后续代码 } $html .= '<div class="content">' . $content . '</div>'; }
- 如果是多层嵌套循环:要是以后遇到嵌套循环的场景,还可以给循环加标签,用
continue 标签名精准跳转到指定循环的开头,比如:
outer_loop: foreach ($outerArray as $item) { while ($innerItem = array_shift($innerArray)) { if ($innerItem['invalid']) { continue outer_loop; // 直接跳转到外层循环的开头 } // 其他代码 } }
不过你的场景里用普通的continue就完全足够了,它会自动回到当前所在的while循环的条件判断位置,刚好符合你要跳过已删除帖子的需求。
内容的提问来源于stack exchange,提问作者Martin AJ
相关产品推荐
相关产品推荐

