当到达最后一个索引和其他一些条件时,如何重新启动 foreach 循环?
循环需要再次运行,相反,它只是停止。
foreach ($getUsers as $index => $user) {
$userID = saveToDB($user, rand(1,1000));
if($index == count($getUsers) && alreadyUsed($userID)) {
reset($getUser);
reset($index);
}
}
这行不通。
PHP 中的 reset() 函数用于将数组的内部指针重置为其第一个元素,但它不会影响 foreach 循环的控制流程,您可以实现所需的行为,如下所示:
$continueLoop = true;
while ($continueLoop) {
foreach ($getUsers as $index => $user) {
$userID = saveToDB($user, rand(1,1000));
if ($index == count($getUsers) - 1 && alreadyUsed($userID)) {
// If you reach the last user and the userID is already used,
// continue the outer while loop
continue 2;
}
}
// If the end of the foreach loop is reached without restarting,
// break out of the while loop
$continueLoop = false;
}
我完全不明白
saveToDB()
和 alreadyUsed()
的作用,但是您可以通过使用后置来重新访问 foreach()
循环(不受数组指针影响,因此不需要重置)测试 while 循环。
do {
foreach ($getUsers as $user) {
$userID = saveToDB($user, rand(1,1000));
}
} while (isset($userID) && alreadyUsed($userID));
这样您就不需要在循环体中使用任何笨重的变量或任何条件控制。
因为您只想在
foreach()
的最后一次迭代有机会执行 saveToDB()
后执行检查,您可以验证 foreach()
循环已进入(因此声明 $userID
),然后检查 alreadyUsed()
是否返回了真实结果。
也就是说,如果
isset($userID)
为空,需要写$getUsers
。
我什至删除了
$index
变量,因为不再需要它。
foreach ($getUsers as $index => $user) {
$userID = saveToDB($user, rand(1,1000));
if ($index == count($getUsers) - 1 && alreadyUsed($userID)) {
continue;
}
// Code...
}
当条件满足时,循环将跳过当前迭代的其余部分,并从下一次迭代开始,从而重新开始循环。
抱歉谷歌翻译:)