Использовать внешнюю переменную в фильтре массива
У меня есть массив, который я хочу отфильтровать по внешней переменной. Ситуация выглядит следующим образом:
$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.
Может ли кто-нибудь сказать мне, почему и как это решить?
29
3 answers
Переменная $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;
});
55
Author: Barmar, 2014-09-23 11:49:00
Проблема с областью действия переменной!
Простым исправлением было бы:
$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;
});
Надеюсь, это поможет
7
Author: php-dev, 2014-09-23 11:48:40
Потому что ваша функция закрытия не может видеть $id
. Вам нужно ключевое слово use
:
$foo = array_filter($bar, function($obj) use ($id) {
5
Author: Joe, 2014-09-23 11:48:25