У меня есть массив, который я хочу отфильтровать по внешней переменной.
Ситуация выглядит следующим образом:
$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;
});
Первый var_dump
возвращает идентификатор (который устанавливается динамически), однако второй var_dump
возвращает NULL.
Может кто-нибудь сказать мне, почему и как это решить?
Переменная $id
не входит в сферу функции. Вам нужно использовать use
предложение, чтобы сделать внешние переменные доступными:
$foo = array_filter($bar, function($obj) use ($id) {
if (isset($obj->foo)) {
var_dump($id);
if ($obj->foo == $id) return true;
}
return false;
});
Переменная область вопроса!
Простое исправление будет:
$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;
});
или, начиная с 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;
});
Надеюсь, поможет
Потому что ваша функция закрытия не может видеть $id
, Вам нужно use
ключевое слово:
$foo = array_filter($bar, function($obj) use ($id) {