我有一个数组,我想通过外部变量对其进行过滤。 情况如下:
$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。
谁能告诉我原因以及如何解决?
变量
$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;
});
请参阅匿名函数的文档(示例#3“从父作用域继承变量”)。
变量范围问题!
简单的修复方法是:
$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;
});
希望有帮助
因为你的闭包函数看不到
$id
。您需要 use
关键字:
$foo = array_filter($bar, function($obj) use ($id) {