Bra*_*rad 5 html php arrays select
我在创建一个有序的多级父 - >子数组时使用了以下stackoverflow 线程,这非常有帮助.
以下是基于上述线程的排序方法的示例多级(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
)
)
)
)
)
)
Run Code Online (Sandbox Code Playgroud)
现在我想采取这种排序后的数组,并产生一个单一的HTML选择显示和表示父- >子结构,如下面的例子:
<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>
Run Code Online (Sandbox Code Playgroud)
上面的目标是编译一个显示字符串,表示每个项目的多级父/子路径.每个选项的VALUE是表示的已编译字符串中的最后一项.因此,对于OPTION'用户手册 - >用户 - >权限',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>
Run Code Online (Sandbox Code Playgroud)
您可以看到它只能跟踪父/子关系的一个级别.
我处理数组以创建选择选项列表的函数如下:
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;
}
Run Code Online (Sandbox Code Playgroud)
当有多个级别时,我无法跟踪前一个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;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3192 次 |
最近记录: |