【问题标题】:How to search for a needle in multi-dimensional array in php?如何在php中的多维数组中搜索针?
【发布时间】:2020-05-30 07:28:39
【问题描述】:

我有一些不同类型的 php 数组,它们可以在任何级别的嵌套中包含敏感数据。我想取消设置这个敏感键。我该怎么办?

例如敏感数据键可以是account_noacc_no

示例请求数组1:

[
    'ClientCode'   => "abcom",
    'MerchantCode' => "Code1",
    'acc_no'       =>  "12345"
]

这个数组应该变成

[
    'ClientCode'   =>  "abcom"
    'MerchantCode' =>  "Code1"

]

示例请求数组2:

  [
      'customer_name' => "Umesh",
      'age' => 24,
      'customer_details' => [
          'mob_no' => "989729069",
          'account_no' => '1235'
      ]
  ]

这个数组应该变成

[
      'customer_name' => "Umesh",
      'age'           => 24,
      'customer_details' => [
          'mob_no' => "989729069"
      ]
]

【问题讨论】:

  • 循环遍历主数组和customer_details,如果找到敏感列,则取消设置。

标签: php arrays laravel security logging


【解决方案1】:

无循环解决方案

在第一个数组中:

unset($arr['acc_no']);

在第二个数组中:

unset($arr['customer_details']['account_no']);

使用循环的解决方案

第一个数组:

foreach($arr1 as $key => $value) {
   if($key === 'acc_no') {
      unset($arr1['acc_no']);
   }
}

第二个数组:

foreach($arr2 as $key => $value) {
    if($key === 'customer_details') {
        unset($arr2['customer_details']['account_no']);
    }
}

【讨论】:

    【解决方案2】:

    任何级别的嵌套的最佳解决方案是递归函数:

    $your_array = array(
      'client'  => '1234',
      'acc_no'  => '12345',
      'test'    => array(
        'acc_no'  => '12',
        'acc'    => '12345'
      )
    );
    
    function unset_sensitive_keys( &$array, $delete_keys )  {
      foreach( $array as $key => &$value ) {
        if( is_array( $value ) )  {
          unset_sensitive_keys( $value, $delete_keys );
        } else {
          if( in_array( $key, $delete_keys )  ) {
            unset($array[$key]);
          }
        }
      }
    }
    
    unset_sensitive_keys( $your_array, array( 'acc_no', 'account_no' ) );
    

    【讨论】:

      猜你喜欢
      • 2016-09-19
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      • 2011-05-20
      • 2017-07-23
      • 2020-01-15
      相关资源
      最近更新 更多