php 在array_filter中使用外部变量

hxzsmxv2  于 2023-09-29  发布在  PHP
关注(0)|答案(3)|浏览(112)

我有一个数组,我想用一个外部变量来过滤它。情况如下:

$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。
谁能告诉我为什么,以及如何解决它?

lsmepo6l

lsmepo6l1#

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

参见Anonymous functions的文档(Example #3“Inheriting variables from the parent scope”)。

x6h2sr28

x6h2sr282#

变量范围问题!
简单的解决方法是:

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

希望它能帮助

aelbi1ox

aelbi1ox3#

因为闭包函数看不到$iduse关键字:

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

相关问题