我想知道当你找到你想要的结果时,是否有办法打破遍历数组的其余部分:
array_walk($arr, function($value, $key)
{
if($value == "test")
{
global $id;
$id = $key;
break; // I know that break doesn't work! that's just for example.
}
});
Run Code Online (Sandbox Code Playgroud)
上面的例子展示了我所说的从 array_walk
根据此答案(/sf/answers/1249735161/),您可以使用缓存异常破坏函数:
try {
array_walk($arr, function($value, $key)
{
if($value == "test")
{
global $id;
$id = $key;
throw new Exception;
}
});
} catch (Exception $e) {
//
}
// Rest of your code
Run Code Online (Sandbox Code Playgroud)
虽然我也建议您使用普通的break能够循环。
祝你好运;
这也可能是一种解决方案,更具语义。这不会破坏闭包,而是只运行一次条件。也摆脱了那个讨厌的全局。
$array = array(1,2,3,'test',5,6,7,8,9,10);
$stop = false;
$id = 0;
array_walk($array, function($value, $key) use ($stop, &$id){
if (!$stop && $value == 'test') {
$id = $key;
$stop = true;
echo $id;
}
});
// This just echo 3;
Run Code Online (Sandbox Code Playgroud)