在array_filter中使用外部变量

时间:2014-09-23 11:44:57

标签: php scope array-filter

我有一个数组,我希望通过外部变量进行过滤。 情况如下:

$id = '1';
var_dump($id);
$foo = array_filter($bar, function($obj){
    if (isset($obj->foo)) {
        var_dump($id);
        if ($obj->foo == $id) return true;
    }
    return false;
});

第一个var_dump返回ID(动态设置的课程),但是,第二个var_dump返回NULL。

谁能告诉我为什么,以及如何解决它?

3 个答案:

答案 0 :(得分:69)

变量$id不在函数范围内。您需要使用use子句来访问外部变量:

$foo = array_filter($bar, function($obj) use ($id) {
    if (isset($obj->foo)) {
        var_dump($id);
        if ($obj->foo == $id) return true;
    }
    return false;
});

答案 1 :(得分:7)

可变范围问题!

简单修复就是:

$id = '1';
var_dump($id);
$foo = array_filter($bar, function($obj){
    global $id;
    if (isset($obj->foo)) {
        var_dump($id);
        if ($obj->foo == $id) return true;
    }
    return false;
}); 

或者,自PHP 5.3起

$id = '1';
var_dump($id);
$foo = array_filter($bar, function($obj) use ($id) {
    if (isset($obj->foo)) {
        var_dump($id);
        if ($obj->foo == $id) return true;
    }
    return false;
});

希望有所帮助

答案 2 :(得分:5)

因为您的关闭功能无法查看$id。您需要use关键字:

$foo = array_filter($bar, function($obj) use ($id) {