【问题标题】: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']);
    }

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

【问题讨论】:

    标签: php unset


    【解决方案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 快​​还是慢。也许对于一个小数组,差异可以忽略不计,所以问题不存在。通常,我喜欢不循规蹈矩的解决方案,以便学到更多东西。
      猜你喜欢
      • 2016-12-14
      • 1970-01-01
      • 2016-03-25
      • 2021-05-20
      • 1970-01-01
      • 2018-08-01
      • 2014-01-29
      • 2018-04-12
      • 1970-01-01
      相关资源
      最近更新 更多