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