J'ai un tableau que je veux filtrer par une variable externe. La situation est la suivante:
$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;
});
La première var_dump
renvoie l'ID (qui est bien sûr défini dynamiquement), cependant, le deuxième var_dump
renvoie NULL.
Quelqu'un peut-il me dire pourquoi et comment le résoudre?
La variable $id
ne fait pas partie de la fonction. Vous devez utiliser la clause use
pour rendre les variables externes accessibles:
$foo = array_filter($bar, function($obj) use ($id) {
if (isset($obj->foo)) {
var_dump($id);
if ($obj->foo == $id) return true;
}
return false;
});
Problème de portée variable!
Une solution simple serait:
$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;
});
ou, puisque 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;
});
J'espère que cela aide