如何取消设置对象数组中所有对象的键?

Posted

技术标签:

【中文标题】如何取消设置对象数组中所有对象的键?【英文标题】:How to unset a key in all objects in an array of objects? 【发布时间】:2020-12-15 01:11:20 【问题描述】:

我正在尝试取消设置对象数组中所有对象的键(基本上删除任何密码),这样做:

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

但它似乎不会影响“原始”数据......我如何通过引用来做到这一点(或使这项工作成为“预期”所需的任何东西——我的意思是,密钥已从原始数组中的所有对象)?

【问题讨论】:

【参考方案1】:

您可以像这样传递$user 作为参考:

// check this --------------v
foreach ( $data['users'] as &$user) 
    unset($user['password']);

【讨论】:

很奇怪,我最初尝试过,但无法成功。现在它“以某种方式”确实......当时可能有其他东西破坏了它,谢谢。【参考方案2】:

试试:

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

或者

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

【讨论】:

【参考方案3】:

我的建议:

array_walk($data['users'], function(&$a) unset($a['password']););

【讨论】:

那么,与其他解决方案相比,是否有性能提升,或者?从其他人的测试看来,foreach 更快......这里有一个例子:ktorides.com/2015/02/php-array_walk-vs-foreach 还有其他...... 我不知道foreacharray_walk 快​​还是慢。也许对于一个小数组,差异可以忽略不计,所以问题不存在。通常,我喜欢不循规蹈矩的解决方案,以便学到更多东西。

以上是关于如何取消设置对象数组中所有对象的键?的主要内容,如果未能解决你的问题,请参考以下文章

ES6对象的新增方法

我应该如何验证对象2中对象1的键?

如何根据从另一个可观察对象返回的数组中的键创建可观察/ http请求数组

JavaScript:检查对象数组中是不是存在重复的键值并删除所有但最近添加的具有该键值的对象

C# Unity如何只选择数组中的一项并取消选择其他项

PHP无法取消设置对象内的数组元素