San*_*ood 38 php scope 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;
});
Run Code Online (Sandbox Code Playgroud)
第一个var_dump返回ID(动态设置为ofcourse),但第二个var_dump返回NULL.
谁能告诉我为什么,以及如何解决它?
Bar*_*mar 81
变量$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;
});
Run Code Online (Sandbox Code Playgroud)
可变范围问题!
简单的解决方法是:
$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;
});
Run Code Online (Sandbox Code Playgroud)
或者,自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;
});
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你
因为你的闭包功能看不到$id.你需要use关键字:
$foo = array_filter($bar, function($obj) use ($id) {
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15175 次 |
| 最近记录: |