在PHP中将数组转换为treeview(convert array to treeview in php)

如何在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.

在PHP中将数组转换为treeview(convert array to treeview in php)

如何在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.