Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use external variable in array_filter

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?

like image 410
Sander Koedood Avatar asked Sep 23 '14 11:09

Sander Koedood


2 Answers

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; }); 
like image 76
Barmar Avatar answered Oct 13 '22 07:10

Barmar


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

like image 43
php-dev Avatar answered Oct 13 '22 08:10

php-dev