在 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。

有人能告诉我为什么,怎么解决吗?

34414 次浏览

Because your closure function can't see $id. You need the use keyword:

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

Variable scope issue!

Simple fix would be :

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

or, since 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;
});

Hope it helps

The variable $id isn't in the scope of the function. You need to use the use clause to make external variables accessible:

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