2

我有一段这样的 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

4 回答 4

3

用于break 2;退出 theforeach和 thewhile

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

于 2013-01-24T23:38:54.350 回答
2

break在找到(或没有?)匹配后使用。

并停止 while 循环:break 2;

如果这是代码在函数内并且您没有其他任何内容,那么您不妨返回结果。

于 2013-01-24T23:37:33.597 回答
2

我不确定 $attempts 和 $cycles 发生了什么,因为它们似乎没有从循环内更改,但是如果您真的想更改 $player_array 中包含的 $player 中的值,您应该这样做

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

请注意,我更改$player&$player使其成为参考而不是副本

我还更改了您的 isset,以便仅在结果尚未存储在结果中时才进行搜索

于 2013-01-24T23:38:48.300 回答
2

它不设置变量的原因是因为您只设置了一个 $player,结果为 1 或 0(或真/假)。下一次在循环中,$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;

于 2013-01-24T23:40:06.450 回答