以下是一家公司给出的面试题,现在简单实现一下。主要用了迭代,没有过多注重性能
<?php
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />";
$directory = array( //目录数组赋值
'0' => array( '' , '主目录' ),
'1' => array( '0' , '第一级目录1'),
'2' => array( '0' , '第一级目录2'),
'3' => array( '0' , '第一级目录3'),
'4' => array( '' , '主目录2'),
'5' => array( '1' , '第二级目录1')
//'6' => array( '5' , '第三级目录1')
);
/**
显示目录函数
$directory 目录数组
**/
function show_cate( $directory )
{
//print_r( $directory );
foreach( $directory as $key => $value ) //循环目录数组
{
if( $value[0] == '' ) //如果key值为空,表示为根目录
{
echo $value[1]; //打印出根目录
echo "<br/>";
sub_cate( $directory ,$key , 1 ); //调用子分类函数
}
}
}
/**
递归显示子分类
$directory 目录数组
$parent 父节点
$level 层级数
**/
function sub_cate( $directory ,$parent , $level )
{
foreach( $directory as $key => $value ) //循环目录数组
{
//print_r( $value );
//echo $value[ 0 ].'sss';
if( $value[0] == $parent && $value[0] !='' ) //如果数组下标为0的值等于父级ID值,且数组下标为0的值不能为空
{
echo str_repeat( '--' , $level).$value[1]."<br/>"; //填充前面的空间,并打印该分类的值
sub_cate( $directory , $key , $level+1 ); //继续递归调用子分类
}
}
}
show_cate( $directory ); //调用目录显示函数
?>
<?php
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />";
$directory = array( //目录数组赋值
'0' => array( '' , '主目录' ),
'1' => array( '0' , '第一级目录1'),
'2' => array( '0' , '第一级目录2'),
'3' => array( '0' , '第一级目录3'),
'4' => array( '' , '主目录2'),
'5' => array( '1' , '第二级目录1')
//'6' => array( '5' , '第三级目录1')
);
/**
显示目录函数
$directory 目录数组
**/
function show_cate( $directory )
{
//print_r( $directory );
foreach( $directory as $key => $value ) //循环目录数组
{
if( $value[0] == '' ) //如果key值为空,表示为根目录
{
echo $value[1]; //打印出根目录
echo "<br/>";
sub_cate( $directory ,$key , 1 ); //调用子分类函数
}
}
}
/**
递归显示子分类
$directory 目录数组
$parent 父节点
$level 层级数
**/
function sub_cate( $directory ,$parent , $level )
{
foreach( $directory as $key => $value ) //循环目录数组
{
//print_r( $value );
//echo $value[ 0 ].'sss';
if( $value[0] == $parent && $value[0] !='' ) //如果数组下标为0的值等于父级ID值,且数组下标为0的值不能为空
{
echo str_repeat( '--' , $level).$value[1]."<br/>"; //填充前面的空间,并打印该分类的值
sub_cate( $directory , $key , $level+1 ); //继续递归调用子分类
}
}
}
show_cate( $directory ); //调用目录显示函数
?>