php树状结构
public function actionIndex ( )
{
$categories = array (
array ( 'id' => 1 , 'name' => '电脑' , 'pid' => 0 ) ,
array ( 'id' => 2 , 'name' => '手机' , 'pid' => 0 ) ,
array ( 'id' => 3 , 'name' => '笔记本' , 'pid' => 1 ) ,
array ( 'id' => 4 , 'name' => '台式机' , 'pid' => 1 ) ,
array ( 'id' => 5 , 'name' => '智能机' , 'pid' => 2 ) ,
array ( 'id' => 6 , 'name' => '功能机' , 'pid' => 2 ) ,
array ( 'id' => 7 , 'name' => '超级本' , 'pid' => 3 ) ,
array ( 'id' => 8 , 'name' => '游戏本' , 'pid' => 3 ) ,
) ;
$tree = $categories ;
print_r ( self :: get_attr ( $tree , 0 ) ) ;
}
public static function get_attr ( $a , $pid )
{
$tree = array ( ) ;
foreach ( $a as $v ) {
if ( $v [ 'pid' ] == $pid ) {
$v [ 'children' ] = self :: get_attr ( $a , $v [ 'id' ] ) ;
if ( $v [ 'children' ] == null ) {
unset ( $v [ 'children' ] ) ;
}
$tree [ ] = $v ;
}
}
return $tree ;
}
获得一个父级级
public static function parents ( $groupid , $recursive = true , & $_parents = array ( ) )
{
if ( $groupid <= 0 ) {
return array ( ) ;
}
$groups = self :: all ( ) ;
$parents = array ( ) ;
$pid = 0 ;
foreach ( $groups as $k => $group ) {
if ( $group [ 's_id' ] == $groupid ) {
$pid = $group [ 's_parent_id' ] ;
break ;
}
}
if ( $pid > 0 ) {
foreach ( $groups as $k => $group ) {
if ( $group [ 's_id' ] == $pid ) {
$parents [ ] = $group ;
$_parents [ ] = $group ;
break ;
}
}
if ( ! $recursive ) {
return $parents ;
}
return self :: parents ( $pid , true , $_parents ) ;
} else {
return $_parents ;
}
}
public static function all ( )
{
$sql = "select * from zc_c_section where s_status=0" ;
return app ( 'mysql' ) -> select ( $sql ) ;
}
树
public static function getChildSid ( $sid )
{
$return = [ ] ;
$rs = Section :: getSecChildByParentId ( $sid ) ;
foreach ( $rs as $k => $v ) {
$return [ ] = $v [ 's_id' ] ;
$child = self :: getChildSid ( $v [ 's_id' ] ) ;
$return = array_merge ( $return , $child ) ;
}
return $return ;
}
public static function makeTree ( $data , $prestr = '' )
{
$new_arr = array ( ) ;
foreach ( $data as $k => $v ) {
if ( $prestr ) {
if ( $v == end ( $data ) ) {
$v [ 's_name' ] = $prestr . '└─ ' . $v [ 's_name' ] ;
} else {
$v [ 's_name' ] = $prestr . '├─ ' . $v [ 's_name' ] ;
}
}
if ( $prestr == '' ) {
$prestr_for_children = ' ' ;
} else {
if ( $v == end ( $data ) ) {
$prestr_for_children = $prestr . ' ' ;
} else {
$prestr_for_children = $prestr . '│ ' ;
}
}
$v [ 'child' ] = self :: makeTree ( $v [ 'child' ] , $prestr_for_children ) ;
$new_arr [ ] = $v ;
}
return $new_arr ;
}
public static function getMake ( $arr )
{
$str = '' ;
foreach ( $arr as $k => $v ) {
$str .= "<option value=''>{ $v [ 's_name' ] } </option>" ;
$str .= self :: getMake ( $v [ 'child' ] ) ;
}
return $str ;
}