PHP : 如何使用另一个关联数组从一个关联数组中删除元素
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 但我收到 "Array to string conversion" 错误,我认为这是因为它们是嵌套数组。
我创建了一个函数,但我无法让它工作。
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);
我有两个数组,一个包含所有数据,另一个包含我要删除的键的关联数组。
$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 但我收到 "Array to string conversion" 错误,我认为这是因为它们是嵌套数组。
我创建了一个函数,但我无法让它工作。
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);