Подтвердить что ты не робот

Использовать внешнюю переменную в 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.

Может ли кто-нибудь сказать мне, почему и как его решить?

4b9b3361

Ответ 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;
});

Надеюсь, что это поможет