我想知道当你找到你想要的结果时,是否有办法打破数组的其余部分:
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.
}
});
以上示例显示了从array_walk
答案 0 :(得分:3)
基于此答案(https://stackoverflow.com/a/17853359/2112743),您可以使用缓存的异常来破坏函数:
try {
array_walk($arr, function($value, $key)
{
if($value == "test")
{
global $id;
$id = $key;
throw new Exception;
}
});
} catch (Exception $e) {
//
}
// Rest of your code
虽然我也建议您使用正常的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;