【问题标题】:Remove some keys from an array inside another array in PHP (Laravel)从PHP(Laravel)中另一个数组中的数组中删除一些键
【发布时间】:2021-11-22 11:39:12
【问题描述】:

如何从 PHP 中另一个数组中的数组中删除一些键? 我有这个结构:

array (
  0 => 
  array (
    'num' => '123',
    'nome' => 'test 001'
    'pontos' => 68,
    'data_status' => '03/09/2021 10:05',
    'uuid_status' => '69450ea451ae11ea85ca309c23d3a0ed'
  ),
  1 => 
  array (
    'num' => '345',
    'nome' => 'test 002'
    'pontos' => 120,
    'data_status' => '27/08/2021 15:46',
    'uuid_status' => '3cbf4fd15d5411ea86956eef5d66cb13',
  ),
)

并且需要返回如下内容:

array (
  0 => 
  array (
    'num' => '123',
    'nome' => 'test 001'
    'pontos' => 68
  ),
  1 => 
  array (
    'num' => '345',
    'nome' => 'test 002'
    'pontos' => 120
  )
)

我已经看到了一些答案,但它们似乎已经过时了,我也在使用 Laravel,所以如果有人从框架中指出一些东西以及它在纯 PHP 中的等价物会有所帮助

【问题讨论】:

  • ...我看过一些答案,但它们似乎已经过时了... 这些答案有什么问题?你一直在自己尝试什么?您面临什么问题?
  • 请记住 Laravel 只是一个框架。这一切都在 PHP 上取得平衡,所以任何 Laravel 都是 PHP 的定义
  • 有人能指出一个正确的吗?我尝试了来自 Laravel 的 Arr::only 助手并返回:return array_intersect_key($array, array_flip((array) $keys));但我无法让它工作,因为数组中的数组,我不知道如何
  • 你想从这个数组中删除项目还是创建一个没有你不想要的项目的新数组
  • 这是否来自查询?如果是这样,您可以选择此时需要的列。

标签: php arrays laravel


【解决方案1】:

一个简单的 foreach 循环是一个很好的起点,注意这将从原始数组中删除项目,通过使用对数组的引用 & 而不是普通的简单副本。在$valforeach ( $input as &$val){

$input = [
    [   
        'num' => '123',
        'nome' => 'test 001',
        'pontos' => 68,
        'data_status' => '03/09/2021 10:05',
        'uuid_status' => '69450ea451ae11ea85ca309c23d3a0ed'
    ],[
        'num' => '345',
        'nome' => 'test 002',
        'pontos' => 120,
        'data_status' => '27/08/2021 15:46',
        'uuid_status' => '3cbf4fd15d5411ea86956eef5d66cb13'
    ]
];

$remove = ['data_status','uuid_status'];

foreach ( $input as &$val){
    foreach ($val as $k => $v) {
        if ( in_array($k,$remove) ) {
            unset( $val[$k]);
        }
    }
}
print_r($input);

结果

Array
(
    [0] => Array
        (
            [num] => 123
            [nome] => test 001
            [pontos] => 68
        )

    [1] => Array
        (
            [num] => 345
            [nome] => test 002
            [pontos] => 120
        )

)

【讨论】:

    【解决方案2】:

    可能不是最简洁的,但它可以完成工作:

    $bad_keys = array('data_status', 'uuid_status');
    
    
    
    
    $array = array (
      0 => 
      array (
        'num' => '123',
        'nome' => 'test 001',
        'pontos' => 68,
        'data_status' => '03/09/2021 10:05',
        'uuid_status' => '69450ea451ae11ea85ca309c23d3a0ed',
      ),
      1 => 
      array (
        'num' => '345',
        'nome' => 'test 002',
        'pontos' => 120,
        'data_status' => '27/08/2021 15:46',
        'uuid_status' => '3cbf4fd15d5411ea86956eef5d66cb13',
      ),
    );
    
    
    function traverse_array($array, $bad_keys) {
    
    
    foreach ($array as $key => $value) {
            
                if (is_array($value)) {
                
                        $array[$key] = traverse_array($value, $bad_keys);
                
                } else {
                
                        foreach ($bad_keys as $remove_me) {
                
                                if ($key == $remove_me) {
                    
                                    unset($array[$key]);
                        
                                    }
                        }
            }
            
         }
         
         return $array;
    }
    
    print_r(traverse_array($array, $bad_keys));
    

    【讨论】:

    • 这将处理多维数组,无论它们有多深
    • 请格式化您的代码并为其添加适当的缩进。旁注:您可以通过 $bad_keys = ['data_status', 'uuid_status']; 使用定义数组的现代方式同样适用于您的所有数组
    • 现代,是指7岁以上?
    • 您忘记重新格式化您的问题。 ..现代,你的意思是 7 岁以上? 是的,绝对!想知道你是否知道7年,为什么你仍然使用石器时代符号
    • 这不是石器时代,它仍然是 php 文档的呈现方式:php.net/manual/en/language.types.array.php 两种方法都没有错,尤其是当我使用 op 使用的格式时......
    猜你喜欢
    • 2016-08-25
    • 2021-07-27
    • 2011-07-22
    • 2013-02-19
    • 2021-07-23
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    相关资源
    最近更新 更多