Son*_*tte 9 php arrays recursion
我有以下数组,我需要递归循环并删除任何具有键'字段'的子数组.我已经尝试了阵列过滤器,但我无法使其中任何一个工作.
$myarray = array(
'Item' => array(
'fields' => array('id', 'name'),
'Part' => array(
'fields' => array('part_number', 'part_name')
)
),
'Owner' => array(
'fields' => array('id', 'name', 'active'),
'Company' => array(
'fields' => array('id', 'name',),
'Locations' => array(
'fields' => array('id', 'name', 'address', 'zip'),
'State' => array(
'fields' => array('id', 'name')
)
)
)
)
);
Run Code Online (Sandbox Code Playgroud)
这就是我需要它的结果如下:
$myarray = array(
'Item' => array(
'Part' => array(
)
),
'Owner' => array(
'Company' => array(
'Locations' => array(
'State' => array(
)
)
)
)
);
Run Code Online (Sandbox Code Playgroud)
sou*_*rge 30
如果要以递归方式操作,则需要将数组作为引用传递,否则会进行大量不必要的复制:
function recursive_unset(&$array, $unwanted_key) {
unset($array[$unwanted_key]);
foreach ($array as &$value) {
if (is_array($value)) {
recursive_unset($value, $unwanted_key);
}
}
}
Run Code Online (Sandbox Code Playgroud)
你想要array_walk
function remove_key(&$a) {
if(is_array($a)) {
unset($a['fields']);
array_walk($a, __FUNCTION__);
}
}
remove_key($myarray);
Run Code Online (Sandbox Code Playgroud)