给定一个表示目录结构的多维数组,我想在某个关键元素处插入一个新项目。
这是数组:
$array = [
[
'key'=> 'b005f8da-208a-406a-8710-48dd5d3e598b',
'title' => 'Title',
],
[
'key'=> 'ca0cd753-1f25-4e1a-b6fc-2e8c0e3aed0e',
'title' => 'Title',
'children' => [
[
'key'=> '605d755a-1ca0-4541-b24e-442bf19d432b',
'title' => 'Title',
],
[
'key'=> 'b8d000a1-5ec4-469d-98aa-6f46647df611',
'title' => 'Title',
'children' => [
[
'key'=> '526b6329-6702-4e8b-83a8-564ba9044ff2',
'title' => 'Title',
'children' => [
[
'key'=> '0450f55f-88ec-476b-a317-f9c51f55baef',
'title' => 'Title',
],
[
'key'=> 'a7f04948-9ef6-4dbc-9350-6db8ced30f01',
'title' => 'Title of target parent element',
],
[
'key'=> 'c8e9e177-0be7-4d31-ad57-8d0677efae7f',
'title' => 'Title',
],
],
],
],
],
[
'key'=> '4aa9b0f4-1c75-4078-a1ec-4a92da20f14e',
'title' => 'Title',
],
],
],
];
这是目标键和新元素:
$targetKey = 'a7f04948-9ef6-4dbc-9350-6db8ced30f01';
$newItem = [
'key' => '8eb51f08-c8e2-47b0-9281-8c689649e8bf',
'title' => 'Title of new element',
];
将新元素作为目标元素的子元素(子数组中的元素)插入的最佳方法是什么?
$array
可以有任意数量的嵌套级别。
感谢您的帮助!
答案 0 :(得分:0)
我自己使用以下递归函数找到了解决方案。
function insertItem(array &$array, $key, array $newItem) {
foreach($array as $k => &$v) {
if(is_array($v)) {
if(array_key_exists('key', $v) && $v['key'] == $key){
$v['children'][] = $newItem;
return true;
}
if(array_key_exists('children', $v)) {
$res = insertItem($v['children'], $key, $newItem);
if($res) return $res;
}
}
}
}
insertItem($array, $targetKey, $newItem);
答案 1 :(得分:-1)
试试这个:
foreach($array AS $arr)
{
if($arr['key'] == 'a7f04948-9ef6-4dbc-9350-6db8ced30f01')
{
$arr[] = array('key' => '8eb51f08-c8e2-47b0-9281-8c689649e8bf','title' => 'Title of new element',);
break;
}
}
答案 2 :(得分:-1)
这是一个例子,给你一个想法:
function recursiveKeyTargeting($array, $target_key, $element_to_add)
{
foreach($array AS $arr)
{
if(is_array($arr['key']))
{
recursiveKeyTargeting($array['key'], $target_key, $element_to_add);
}
else if($arr['key'] == $target_key)
{
$arr[] = $element_to_add;
break;
}
}
}