PHP正确的退出循环方式

时间:2013-01-24 23:35:20

标签: php foreach while-loop

我有一段像这样的PHP代码:

  while($attempts < $cycles) {

        foreach($player_array as $player) {
                if(isset($player['results']) && $player['results'] == 1) {
                        $player['results'] = player_search($f, $s, $t);
                }
        }
}

这个想法是为数组中的每个项目调用一个搜索功能。如果搜索没有任何内容,则返回false,它应该通过更改'results'的值来阻止它调用其余剩余周期的搜索。

我假设将$player['results']设置为false实际上并没有设置正确的变量,因为它在下一次迭代时将其拉入。

我应该如何更改代码才能使其正常工作?

编辑:

我是否可以明确指出,如果函数中的搜索没有返回任何结果,我不希望再次调用该函数,但是我想要将相同的函数用于其他搜索,如果它们仍有结果的话。显然,一旦所有玩家搜索都没有结果,我理想情况下也会打破while循环。

4 个答案:

答案 0 :(得分:3)

使用break 2;退出foreachwhile

while($attempts < $cycles) {
    foreach($player_array as $player) {
        if(isset($player['results']) && $player['results'] == 1) {
            $player['results'] = player_search($f, $s, $t);
            break 2;
        }
    }
}

PHP手册中的示例:http://php.net/manual/en/control-structures.break.php

答案 1 :(得分:2)

找到(或不是?)匹配后使用break

并停止while循环:break 2;

如果这是代码在函数内,并且你没有别的东西,你也可以返回结果。

答案 2 :(得分:2)

我不确定是什么尝试和$循环,因为它们似乎不会在循环内改变但是如果你真的想要改变$ player_array中包含的$ player中的值你应该做

foreach($player_array as &$player) {
    if(!isset($player['results'])) {
        $player['results'] = player_search($f, $s, $t);
    }
}

通知我已将$player更改为&$player,以便它成为参考而非副本

我也改变了你的isset,只有在结果没有存储在结果中时才进行搜索

答案 3 :(得分:2)

它没有设置变量的原因是因为你只设置一个$ player,结果为1或0(或true / false)。循环中的下一次,$ player变量与前一个变量不同。为什么不这样做呢?

while($attempts < $cycles) {
  foreach($player_array as $player) {
    if(isset($player['results']) && $player['results'] == 1) {
      if(!player_search($f, $s, $t)) break;
      else //something here
    }
  }
}

如果你想突破while循环,你可以随时break 2;