У меня есть JSON, который выглядит следующим образом
$data = '{
"account_owner": "",
"account_type": "",
"nest_uid":"17_15_1536914882_yhHDzQsDSI",
"business_name": "",
"sync_block": false,
"validation": {"isError": false,
"inputList": [],
"message": ""},
"contacts": [
{
"con_title": "",
"con_fName": "",
"con_lName": "",
"con_job_title": "",
"emails": [
{
"email": "",
"type": "",
"primary": false,
"nest_uid": "17_15_1536914882_yhHDzQsDSK",
"validation": {
"isError": false,
"inputList": [],
"message": ""
},
"checked": false
}
],
"phones": [
{
"phone": "",
"type": "",
"primary": false,
"nest_uid": "17_15_1536914882_uHN38SxJ3s",
"validation": {
"isError": false,
"inputList": [],
"message": ""
},
"checked": false
}
],
"nest_uid": "17_15_1536914882_hwzB7dIn9v",
"checked": false
},
{
"con_title": "",
"con_fName": "",
"con_lName": "",
"con_job_title": "",
"emails": [
{
"email": "",
"type": "",
"primary": false,
"nest_uid": "17_15_1536914882_yhHDzQsDSx",
"validation": {
"isError": false,
"inputList": [],
"message": ""
},
"checked": false
}
],
"phones": [
{
"phone": "",
"type": "",
"primary": false,
"nest_uid": "17_15_1536914882_uHN38SxJ3Y",
"validation": {
"isError": false,
"inputList": [],
"message": ""
},
"checked": false
}
],
"nest_uid": "17_15_1536914882_hwzB7dIn9x",
"checked": false
}
]
}';
, тогда у меня есть еще один вход
$param = ['contacts', 'emails'];
Я должен написать рекурсивную функцию, которая будет принимать$param
в качестве пути и прохождение набора данных, чтобы получить на выходе что-то вроде этого
Например, если путь равен
["contacts"]
Выход
[
{
"data": {
"con_title": "",
"con_fName": "",
"con_lName": "",
"con_job_title": "",
"emails": [
{
"email": "",
"type": "",
"primary": false,
"nest_uid": "17_15_1536914882_yhHDzQsDSK",
"validation": {
"isError": false,
"inputList": [],
"message": ""
},
"checked": false
}
],
"phones": [
{
"phone": "",
"type": "",
"primary": false,
"nest_uid": "17_15_1536914882_uHN38SxJ3s",
"validation": {
"isError": false,
"inputList": [],
"message": ""
},
"checked": false
}
],
"nest_uid": "17_15_1536914882_hwzB7dIn9v",
"checked": false
},
"source": [
"17_15_1536914882_yhHDzQsDSI",
"17_15_1536914882_yhHDzQsDSK"
]
},
{
"data": {
"con_title": "",
"con_fName": "",
"con_lName": "",
"con_job_title": "",
"emails": [
{
"email": "",
"type": "",
"primary": false,
"nest_uid": "17_15_1536914882_yhHDzQsDSK",
"validation": {
"isError": false,
"inputList": [],
"message": ""
},
"checked": false
}
],
"phones": [
{
"phone": "",
"type": "",
"primary": false,
"nest_uid": "17_15_1536914882_uHN38SxJ3s",
"validation": {
"isError": false,
"inputList": [],
"message": ""
},
"checked": false
}
],
"nest_uid": "17_15_1536914882_hwzB7dIn9v",
"checked": false
},
"source": [
"17_15_1536914882_yhHDzQsDSI",
"17_15_1536914882_yhHDzQsDSx"
]
}
]
Таким образом, в основном количество элементов сопоставляется с этим исходным деревом, которое является списком nest_ui
Я пытаюсь написать код по этим строкам
function genrate_nested_uid($innerdata,$param,$nestUidList,$parentkey){
foreach($param as $keyParam)
{
foreach($innerdata as $key=>$property)
{
if($key=="nest_uid")
{
$parentkey[] = $property;
}
else if(is_array($property) && $key==$keyParam)
{
array_shift($param);
if(count($param)>0)
{
foreach($property as $innerproperty){genrate_nested_uid($innerproperty,$param,$nestUidList,$parentkey);
}
}
else{
$nestUidList[] = [
"data"=>$property,
"list"=>$parentkey
];
}
}
}
}
// echo
return $nestUidList;
}
$nestUidList=[];$parentkey=[];
$innerdataX = json_decode($data);
$paramX = ['contacts','emails'];
$res = genrate_nested_uid($innerdataX,$paramX,$nestUidList,$parentkey);
Но я не получаю желаемого результата