gpt4 book ai didi

php - 来自 MySQL 表的 RecursiveArrayIterator

转载 作者:行者123 更新时间:2023-11-29 06:52:28 26 4
gpt4 key购买 nike

我正在寻找一个示例,该示例应如何构建作为 RecursiveArrayIterator 参数传递的递归数组。我有一个带有 id、parent_id 和 title 的 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。

最佳答案

默认情况下,RecursiveIteratorIterator 类只会显示树的“叶子”。也就是说,树中不是数组的所有内容。

您想初始化迭代器以显示数组节点和叶子。然后你只想打印那些数组节点的数据。

$array = new RecursiveArrayIterator($records);
$iterater = new RecursiveIteratorIterator($array, RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterater as $key => $value) {
if (is_array($value)) {
$d = $iterater->getDepth();
echo "depth=$d k=$key value=$value\n";
}
}

> depth=0 k=0 value=Array
> depth=0 k=1 value=Array
> depth=1 k=children value=Array
> depth=2 k=0 value=Array
> depth=2 k=1 value=Array

在这一点上,您会注意到有一个名为“子层”的额外层会扰乱您的深度计数。发生这种情况是因为节点的后代被放入它们自己的数组中。您可以跳过打印这些行,并像这样发出有关数组中项目的更多数据:

foreach ($iterater as $key => $value) {
if (is_array($value) && $key !== 'children') {
$d = $iterater->getDepth();
echo "depth=$d k=$key title={$value['title']}\n";
}
}

关于php - 来自 MySQL 表的 RecursiveArrayIterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14588237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com