Как сбросить ключ во всех объектах в массиве объектов?

Я пытаюсь отключить ключ во всех объектах в массиве объектов (в основном удаляя любые пароли), делая это:

    foreach ( $data['users'] as $user) {
        unset($user['password']);
    }

Но, похоже, это не влияет на «исходные» данные... как мне сделать это по ссылке (или что-то еще, что нужно, чтобы это работало как «ожидаемое» — под которым я подразумеваю, что ключ удаляется из всех объектов в исходный массив)?


person Sam    schedule 26.08.2020    source источник


Ответы (3)


Вы можете передать $user в качестве ссылки следующим образом:

// check this --------------v
foreach ( $data['users'] as &$user) {
    unset($user['password']);
}
person Cid    schedule 26.08.2020
comment
Странно, я сначала пробовал, но не смог заставить это работать. Теперь это "как-то"... наверное, что-то еще сломало его в то время, спасибо. - person Sam; 26.08.2020

Пытаться:

foreach ( $data['users'] as $key => $user) {
    unset($data['users'][$key]['password']);
}

Or

foreach ( $data['users'] as &$user) {
    unset($user['password']);
}
person Daniel Kemeny    schedule 26.08.2020

Мое предложение:

array_walk($data['users'], function(&$a) {unset($a['password']);});
person AbsoluteBeginner    schedule 26.08.2020
comment
Итак, есть ли прирост производительности по сравнению с другими решениями или? Судя по тестам других людей, foreach работает быстрее... Один пример здесь: ktorides.com/2015/02/php-array_walk-vs-foreach И есть другие… - person Sam; 27.08.2020
comment
Я не знаю, foreach быстрее или медленнее, чем array_walk. Возможно, при небольшом массиве разница незначительна, поэтому проблемы не существует. Обычно я люблю нонконформистские решения, чтобы научиться чему-то большему. - person AbsoluteBeginner; 27.08.2020