外部変数でフィルタリングしたい配列があります。状況は次のとおりです。
$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を返しますが、2番目の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;
});
可変スコープの問題!
簡単な修正は次のとおりです。
$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) {