如何在php中将数组转换为treeview
下面是我的阵列
Array ( [0] => Array ( [efi] => Array ( ) ) [1] => Array ( [grub] => Array ( [0] => Array ( [fonts] => Array ( ) ) [1] => Array ( [i386-pc] => Array ( ) ) [2] => Array ( [locale] => Array ( ) ) [3] => Array ( [x86_64-efi] => Array ( ) ) ) ) )我希望输出为树视图
EFI
蛴螬
在我想要的grub下
字体
I386-PC
现场
x86_64的电喷
我使用下面的代码相同
function generateTreeMenu($dir_array, $parent = 0, $limit=0){ if($limit > 1000) return ''; $tree = ''; $tree = '<ul>'; for($i=0, $ni=count($dir_array); $i < $ni; $i++){ if($dir_array[$i]['parent_id'] == $parent){ $tree .= '<li><a>'; $tree .= $dir_array[$i]['title'].'</a>'; $tree .= generatePageTree($dir_array, $dir_array[$i]['id'], $limit++); $tree .= '</li>'; } } $tree .= '</ul>'; return $tree; } generateTreeMenu($dir_array);它显示警告Undefined属性:stdClass :: $ parent_id in
How to convert array to treeview in php
Below is my array
Array ( [0] => Array ( [efi] => Array ( ) ) [1] => Array ( [grub] => Array ( [0] => Array ( [fonts] => Array ( ) ) [1] => Array ( [i386-pc] => Array ( ) ) [2] => Array ( [locale] => Array ( ) ) [3] => Array ( [x86_64-efi] => Array ( ) ) ) ) )I want output as treeview
efi
grub
and under grub I want
fonts
i386-pc
locale
x86_64-efi
I have used below code for same
function generateTreeMenu($dir_array, $parent = 0, $limit=0){ if($limit > 1000) return ''; $tree = ''; $tree = '<ul>'; for($i=0, $ni=count($dir_array); $i < $ni; $i++){ if($dir_array[$i]['parent_id'] == $parent){ $tree .= '<li><a>'; $tree .= $dir_array[$i]['title'].'</a>'; $tree .= generatePageTree($dir_array, $dir_array[$i]['id'], $limit++); $tree .= '</li>'; } } $tree .= '</ul>'; return $tree; } generateTreeMenu($dir_array);it show warning Undefined property: stdClass::$parent_id in
最满意答案
这是我的解决方案,基于您的帖子:
<?php echo "<pre>"; $dir_array = array( array( "efi" => array() ), array( "grub" => array( array("fonts" => array()), array("i386-pc" => array()), array("locale" => array()), array("x86_64-efi" => array()) ) ) ); print_r($dir_array); echo "</pre>\n"; function mygenerateTreeMenu($dir_array,$limit = 0) { $key = ''; if ($limit > 1000) return ''; foreach ($dir_array as $key => $value) { if (!is_int($key)) { $tree .= "<li>"; $tree .= "<a>$key</a><ul>"; $tree .= mygenerateTreeMenu($value,$limit++); $tree .= "</ul></li>\n"; } else { $tree .= mygenerateTreeMenu($value,$limit++); } } return $tree; } echo "<ul>\n"; $tree = mygenerateTreeMenu($dir_array); echo $tree; echo "</ul>\n"; ?>我删除了$ parent,因为我不需要它。 然后,由于构建数组的方式,将忽略整数索引。 如果您可以修改数组,则可以简化它并完全删除整数索引,并将其视为哈希表。 它会使递归代码更简单。
Here is my solution, based on your post:
<?php echo "<pre>"; $dir_array = array( array( "efi" => array() ), array( "grub" => array( array("fonts" => array()), array("i386-pc" => array()), array("locale" => array()), array("x86_64-efi" => array()) ) ) ); print_r($dir_array); echo "</pre>\n"; function mygenerateTreeMenu($dir_array,$limit = 0) { $key = ''; if ($limit > 1000) return ''; foreach ($dir_array as $key => $value) { if (!is_int($key)) { $tree .= "<li>"; $tree .= "<a>$key</a><ul>"; $tree .= mygenerateTreeMenu($value,$limit++); $tree .= "</ul></li>\n"; } else { $tree .= mygenerateTreeMenu($value,$limit++); } } return $tree; } echo "<ul>\n"; $tree = mygenerateTreeMenu($dir_array); echo $tree; echo "</ul>\n"; ?>I removed the $parent as I did not need it. Then because of the way your array is built, integer indexes are ignored. If you can modify your array, you could streamline it and remove integer indexes completely and treat is as a hash table. It would make the recursive code simpler.
更多推荐
发布评论