我有一段像这样的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循环。
答案 0 :(得分:3)
使用break 2;
退出foreach
和while
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)
答案 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;