在array_filter中使用外部变量

2022-08-30 08:41:28

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

$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;
});

第一个返回 ID(当然是动态设置的),但是,第二个返回 NULL。var_dumpvar_dump

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


答案 1

该变量不在函数的作用域内。您需要使用该子句使外部变量可访问:$iduse

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

答案 2

变量范围问题!

简单的修复方法是:

$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;
});

希望它有帮助


推荐