2015-09-17 3 views
0

У меня есть два массива, у которых есть все данные, и еще один ассоциативный массив ключей, которые я хотел бы удалить.PHP: Как удалить элементы из одного ассоциативного массива с использованием другого ассоциативного массива

$all_data = array(
    'one' =>array(
     'one_one'=>array(
      'one_one_one'=>'value', 
      'one_one_two'=>'value', 
     ), 
     'one_two'=> array(
      'one_two_one'=>'value', 
      'one_two_two'=>'value', 
     ) 
    ), 
    'two' =>array(
     'two_one'=>array(
      'two_one_one' =>'value', 
      'two_one_two' =>'value', 
     ), 
     'two_two'=>array(
      'two_two_one'=>'value', 
      'two_two_two'=>'value', 
     ) 
    ) 
); 
$remove_elements = array(
    'one' =>array(
     'one_one', 
     'one_two'=> array(
      'one_two_one', 
     ) 
    ), 
    'two' 
); 

Выход, который я хотел бы, будет выглядеть следующим образом.

$result = array(
    'one' =>array(
     'one_two'=> array(
      'one_two_two'=>'value', 
     ) 
    ) 
); 

Я попытался array_diff, но я получаю «массив для преобразования строки» ошибка, я предполагаю, что это потому, что они являются вложенными массивами.

Я создал функцию, но не могу заставить ее работать.

function arrayRecursiveUnset($array_1, $array_2) { 

    foreach ($array_1 as $array_1_key => $array_1_value) { 

    if (array_key_exists($array_1_key, $array_2)) { 

     if (is_array($array_1_value)) { 

     $array_1[$array_1_key] = arrayRecursiveUnset($array_1_value, $array_2[$array_1_key]); 

     } else { 
     unset($array_1[$array_1_key]); 
     } 
    } 
    } 
    return $array_1; 
} 
+3

Вы пробовали что-нибудь? – TreeTree

+2

В чем вопрос? –

+1

Звучит больше как _do это для меня_ – user5173426

ответ

0

Это не было тщательно протестировано, но, похоже, оно работает для меня. надеюсь, это поможет кому-то.

function arrayRecursiveUnset($array_1, $array_2) { 

    foreach ($array_1 as $array_1_key => $array_1_value) { 

     if (array_key_exists($array_1_key, $array_2)) { 

      if (is_array($array_1_value)) { 

       $array_1[$array_1_key] = arrayRecursiveUnset($array_1_value, $array_2[$array_1_key]); 

      } else { 

       unset($array_1[$array_1_key]); 
      } 
     } else if (in_array($array_1_key, $array_2)){ 
      unset($array_1[$array_1_key]); 
     } 
    } 
    return $array_1; 
} 


$result = arrayRecursiveUnset( $all_data , $remove_elements); 
Смежные вопросы