从array_walk跳出来

时间:2013-12-10 19:36:24

标签: php

我想知道当你找到你想要的结果时,是否有办法打破数组的其余部分:

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

跳出来的含义

1 个答案:

答案 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;