Как искать иголку в многомерном массиве в php? - PullRequest
1 голос
/ 14 февраля 2020

У меня есть несколько различных типов php массивов, которые могут содержать конфиденциальные данные на любом уровне вложенности. Я хочу сбросить эту чувствительную клавишу. Как мне go об этом?

Например, для секретных ключей данных могут быть account_no, acc_no et c

Пример массива запросов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"
      ]
]

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Лучшим решением для любого уровня вложенности является рекурсивная функция:

$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' ) );
0 голосов
/ 14 февраля 2020

Решение без l oop

В первом массиве:

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']);
    }
}
...