如何使用另一个关联数组从一个关联数组中删除元素


PHP : How to delete elements from one associative array using another associative array

我有两个数组,一个包含所有数据,另一个包含我想要删除的键的关联数组。

$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;
} 

它还没有经过彻底的测试,但它似乎是为我需要它的工作。希望这能帮助到一些人。

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);