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

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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector