我有两个数组,一个包含所有数据,另一个是我要删除的键的关联数组。
$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 :(得分: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);