我有一个数组,我希望通过外部变量进行过滤。 情况如下:
$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。
谁能告诉我为什么,以及如何解决它?
答案 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) {