预期输出预期输入我需要从一个对象数组中创建一个嵌套的依赖对象,其中最里面的对象将包含一个键值对。我通过数组操作做到了这一点,我首先将对象值和键值存储在二维数组中,然后使用这个二维数组(修剪数组),将具有相同父索引值的两行合并在一起。
function recursiveMerge($rowIdx,$columnIdx,$trimmedArray,$parentArray){
/*base condition - when no column left to traverse recursively*/
if($columnIdx<1){
return($trimmedArray);
} elseif($rowIdx+1 == count($trimmedArray)){
/*
when all the rows are merged for a dropdown column, it calls the
function for the parent dropdown column
*/
$trimmedArray=array_values($trimmedArray);
$parentArray=array_values($parentArray);
//the unique dropdown values are nested inside its parent column
$trimmedArray[$rowIdx][$columnIdx-1]=array($trimmedArray[$rowIdx][$columnIdx-1]=>$trimmedArray[$rowIdx][$columnIdx]);
return(recursiveMerge(0,--$columnIdx,$trimmedArray,$parentArray));
} else {
/*
the rows which have identical parent dependent keys are merged together into
the first row and the second row is deleted(unset)
*/
if($parentArray[$rowIdx][$columnIdx]===$parentArray[$rowIdx+1][$columnIdx]){
// $trimmedArray[$rowIdx][$columnIdx]=$trimmedArray[$rowIdx][$columnIdx] + $trimmedArray[$rowIdx+1][$columnIdx];
$trimmedArray[$rowIdx][$columnIdx]=array_merge_custom($trimmedArray[$rowIdx][$columnIdx], $trimmedArray[$rowIdx+1][$columnIdx]);
unset($parentArray[$rowIdx+1]);
$parentArray=array_values($parentArray);
unset($trimmedArray[$rowIdx+1]);
$trimmedArray=array_values($trimmedArray);
return(recursiveMerge($rowIdx,$columnIdx,$trimmedArray,$parentArray));
}
else{
$trimmedArray[$rowIdx][$columnIdx-1]=array($trimmedArray[$rowIdx][$columnIdx-1]=>$trimmedArray[$rowIdx][$columnIdx]);
return(recursiveMerge(++$rowIdx,$columnIdx,$trimmedArray,$parentArray));
}
}
}
但是,对于尺寸较小的对象数组可以正常工作。具有较大计数的输入数据会导致致命错误:ALlowed memory size 已用尽。