Use external variable in array_filter Use external variable in array_filter php php

Use external variable in array_filter


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


Because your closure function can't see $id. You need the use keyword:

$foo = array_filter($bar, function($obj) use ($id) {