I've got an array, which I want to filter by an external variable. The situation is as follows:
$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; });   The first var_dump returns the ID (which is dynamically set ofcourse), however, the second var_dump returns NULL.
Can anyone tell me why, and how to solve it?
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; }); 
                        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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With