我正在寻找一个示例,应该如何构造作为 RecursiveArrayIterator 的参数传递的递归数组。我有一个带有 id、parent_id 和标题的 mysql 表:
id parent_id title
-----------------|-------------------
1 0 | Item 1
2 1 | Item 2
3 1 | Item 3
4 3 | Item 4
5 4 | Item 5
我想从表中创建一个数组,可以将它传递给 RecursiveArrayIterator 来构建树、菜单、选项等。我已经尝试过这个“build_tree”函数https://stackoverflow.com/a/8587437/1746522从 mysql 表创建一个数组。结果数组如下所示:
array (size=2)
0 =>
array (size=3)
'id' => string '1' (length=1)
'title' => string 'Item 1' (length=6)
'parent_id' => string '0' (length=1)
'children' =>
array (size=2)
0 =>
array (size=3)
...
1 =>
array (size=3)
...
但是当我将结果数组传递给 RecursiveArrayIterator 时,它看起来很奇怪。例如使用这个函数:
$array = new RecursiveArrayIterator($tree);
$iterater = new RecursiveIteratorIterator($array);
foreach ($iterater as $key => $value) {
$d = $iterater->getDepth();
echo "depth=$d k=$key v=$value\n";
}
我有奇怪且无法使用的输出,例如:
depth=0 k=0 v=Array
depth=1 k=id v=1
depth=1 k=title v=Item 1
depth=1 k=parent_id v=0
depth=2 k=0 v=Array
depth=3 k=id v=2
depth=3 k=title v=Item 2
depth=3 k=parent_id v=1
depth=4 k=0 v=Array
....
深度是错误的,它遍历单个值而不是元素。传递给 RecursiveArrayIterator 的数组可能是“格式错误”并且应该以其他方式构造吗?
我期待看到这样的事情:
depth=0 k=1 v=Array
depth=1 k=2 v=Array
depth=1 k=3 v=Array
其中 Array 包含节点的所有值,例如 parent_id 和 title,k 是 mysql 列 id 中的 id。