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