我似乎无法找到最佳方法。我有RecursiveIteratorIterator
。
$info = new RecursiveIteratorIterator(
new GroupIterator($X), # This is a class that implements RecursiveIterator
RecursiveIteratorIterator::SELF_FIRST
);
注意:GroupIterator
是一个处理我们自定义格式数据的类
当我循环通过它时,我得到了我期望的结果。
foreach($info as $data){
echo $info->getDepth().'-'.$data."\n";
}
输出结果为:
0-a
1-b
2-c
2-d
1-e
2-f
0-g
1-h
2-i
到目前为止这是正确的。现在,我想要的是将父母和孩子压扁成一个阵列。我希望每个最大深度的孩子都有一行。我想要的输出是:
0-a 1-b 2-c
0-a 1-b 2-d
0-a 1-e 2-f
0-g 1-h 2-i
我无法弄清楚如何做到这一点。循环上的每次迭代都会给我另一行,我如何将这些行组合在一起?
答案 0 :(得分:1)
我设法搞清楚了。 @ComFreek指出了我正确的方向。我没有使用计数器,而是使用当前深度检查我何时触及最低的子节点,然后将数据添加到最终数组中,否则我将其添加到临时数组中。
$finalArray = array();
$maxDepth = 2;
foreach($info as $data){
$currentDepth = $info->getDepth();
// Reset values for next parent
if($currentDepth === 0){
$currentRow = array();
}
// Add values for this depth
$currentRow[$currentDepth] = $data;
// When at lowest child, add to final array
if($currentDepth === $maxDepth){
$finalArray[] = $currentRow;
}
}
答案 1 :(得分:0)
尝试添加计数器变量:
// rowNr loops through 0, 1, 2
$rowNr = 0;
$curData = [];
$outputData = [];
foreach($info as $data){
// got last element, add the temp data to the actual array
// and reset temp array and counter
if ($rowNr == 2) {
$outputData[] = $curData;
$curData = [];
$rowNr == 0;
}
else {
// save temp data
$curData[] = $info->getDepth() . '-' . $data;
}
$rowNr++;
}