gpt4 book ai didi

php - 使用多级父->子数组创建单个 SELECT

转载 作者:太空狗 更新时间:2023-10-29 16:09:00 25 4
gpt4 key购买 nike

我使用了以下计算器 thread ,这对创建排序的多级父->子数组非常有帮助。

下面是基于上述线程排序方法的多级(3 级)父->子排序数组示例:

Array 
(
[1] => Array
(
[name] => User Manual
[parentId] => 0
[children] => Array
(
[2] => Array
(
[name] => Users
[parentId] => 1
[children] => Array
(
[4] => Array
(
[name] => Privileges
[parentId] => 2
)
)
)
[3] => Array
(
[name] => Reference
[parentId] => 1
[children] => Array
(
[5] => Array
(
[name] => Glossary
[parentId] => 3
)
[6] => Array
(
[name] => Index
[parentId] => 3
)
)
)
)
)
)

现在我想采用排序后的数组并生成一个单个 HTML SELECT 来显示和表示父->子结构,如下例所示:

<option value='1'>User Manual</option>
<option value='2'>User Manual -> Users</option>
<option value='4'>User Manual -> Users -> Privileges</option>
<option value='3'>User Manual -> Reference</option>
<option value='5'>User Manual -> Reference -> Glossary</option>
<option value='6'>User Manual -> Reference -> Index</option>

如上所示,目标是编译一个显示字符串,表示每个项目的多级父/子路径。每个选项的 VALUE 是表示的已编译字符串中的最后一项。因此,对于“用户手册 -> 用户 -> 权限”选项,VALUE 是权限的 ID,但显示文本表示它在数组中的父/子关系。

我创建的选择最终总是显示如下选项列表:

<option value='1'>User Manual</option>
<option value='2'>User Manual -> Users</option>
<option value='4'>Users -> Privileges</option>
<option value='3'>User Manual -> Reference</option>
<option value='5'>Reference -> Glossary</option>
<option value='6'>Reference -> Index</option>

您可以看到它只能跟踪父/子关系的一个级别。

我处理数组以创建选择选项列表的函数如下:

function buildOptions($arr, $target, $parent = NULL) {
$html = "";
foreach ( $arr as $key => $v )
{
if (array_key_exists('children', $v))
{
if ( $key == $target )
$html .= "<option value='$key' selected>$parent {$v['name']}</option>\n";
else
$html .= "<option value='$key'>$parent {$v['name']}</option>\n";

$html .= buildOptions($v['children'],$target,$v['name']." > ");
}
else if ( $key == $target )
$html .= "<option value='$key' selected>$parent {$v['name']}</option>\n";
else
$html .= "<option value='$key'>$parent {$v['name']}</option>\n";

}

return $html;
}

当存在不止一个级别时,我在跟踪前一个 X parent.name 时遇到了麻烦。欢迎任何帮助。谢谢!

最佳答案

以这种方式修复你的递归调用,你应该在每个节点上获得完整的层次结构:

function buildOptions($arr, $target, $parent = NULL) {
$html = "";
foreach ( $arr as $key => $v )
{
if ( $key == $target )
$html .= "<option value='$key' selected>$parent {$v['name']}</option>\n";
else
$html .= "<option value='$key'>$parent {$v['name']}</option>\n";

if (array_key_exists('children', $v))
$html .= buildOptions($v['children'],$target,$parent . $v['name']." > ");
}

return $html;
}

关于php - 使用多级父->子数组创建单个 SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6811672/

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