看了版主的无限分类,分成树形结构后,如何还原

WBOY
Release: 2016-06-23 13:50:26
Original
783 people have browsed it

父子无限分类原始数组<?/*获取无线分类,对无线分类进行节点路径排列*/$a=array (  0 =>  array (    'id' => '134',    'fid' => '0',    'name' => 't',  ),  1 =>  array (    'id' => '133',    'fid' => '0',    'name' => 'k',  ),  2 =>  array (    'id' => '132',    'fid' => '0',    'name' => 'j',  ),  3 =>  array (    'id' => '137',    'fid' => '133',    'name' => '我是k的分类1',  ),  4 =>  array (    'id' => '136',    'fid' => '134',    'name' => '我是t的分类t2',  ),  5 =>  array (    'id' => '135',    'fid' => '134',    'name' => '我是t的分类t1',  ),  6 =>  array (    'id' => '138',    'fid' => '137',    'name' => '我是k的分类1-1',  ),  7 =>  array (    'id' => '139',    'fid' => '138',    'name' => '我是k的分类1-1-1',  ),  8 =>  array (    'id' => '140',    'fid' => '139',    'name' => '我是k的分类1-1-1-1',  ),)?>开始形成树,并且增加路径,树形数组为$treesArray(    [0] => Array        (            [id] => 134            [fid] => 0            [name] => t            [path] => 134            [_sub] => Array                (                    [0] => Array                        (                            [id] => 136                            [fid] => 134                            [name] => 我是t的分类t2                            [path] => 134,136                        )                    [1] => Array                        (                            [id] => 135                            [fid] => 134                            [name] => 我是t的分类t1                            [path] => 134,135                        )                )        )    [1] => Array        (            [id] => 133            [fid] => 0            [name] => k            [path] => 133            [_sub] => Array                (                    [0] => Array                        (                            [id] => 137                            [fid] => 133                            [name] => 我是k的分类1                            [path] => 133,137                            [_sub] => Array                                (                                    [0] => Array                                        (                                            [id] => 138                                            [fid] => 137                                            [name] => 我是k的分类1-1                                            [path] => 133,137,138                                            [_sub] => Array                                                (                                                    [0] => Array                                                        (                                                            [id] => 139                                                            [fid] => 138                                                            [name] => 我是k的分类1-1-1                                                            [path] => 133,137,138,139                                                            [_sub] => Array                                                                (                                                                    [0] => Array                                                                        (                                                                            [id] => 140                                                                            [fid] => 139                                                                            [name] => 我是k的分类1-1-1-1                                                                            [path] => 133,137,138,139,140                                                                        )                                                                )                                                        )                                                )                                        )                                )                        )                )        )    [2] => Array        (            [id] => 132            [fid] => 0            [name] => j            [path] => 132        ))但是我有个问题,如何还原树呢就是还原成原始数组那种二维形式呢,然后多个path值,因为刚才最主要的目的是加个path值$a=array (  0 =>  array (    'id' => '134',    'fid' => '0',    'name' => 't',    'path'=>'134'  ),  1 =>  array (    'id' => '133',    'fid' => '0',    'name' => 'k',    'path'=>' 133,137'  ),.........................我只想用递归可惜才学疏浅,一直不会递归,只能取道一层。。。是在写不出来function test($array) {	foreach ($array as $k=>$v) {			if (array_key_exists('_sub', $v)) {				$temp[]=array_slice($v, 0,4);				 //$temp[]=test($v[''_sub'']);			} else {				$temp[]=$v;			}	}	return $temp;}$x=test($trees);print_r($x);打印出来的数组只有3个Array(    [0] => Array        (            [id] => 134            [fid] => 0            [name] => t            [path] => 134        )    [1] => Array        (            [id] => 133            [fid] => 0            [name] => k            [path] => 133        )    [2] => Array        (            [id] => 132            [fid] => 0            [name] => j            [path] => 132        ))。。。。真心求代码
Copy after login


回复讨论(解决方案)

<?php	$arr = Array(    0 => Array        (            'id' => 134,            'fid' => 0,            'name' => 't',            'path' => 134,            '_sub' => Array                (                    0 => Array                        (                            'id' => 136,                            'fid' => 134,                            'name' => '我是t的分类t2',                            'path' => '134,136'                        ),                     1 => Array                        (                            'id' => 135,                            'fid' => 134,                            'name' => '我是t的分类t1',                            'path' => '134,135'                        )                 )         ),     1 => Array        (            'id' => 133,            'fid' => 0,            'name' => 'k',            'path' => 133,            '_sub' => Array                (                    0 => Array                        (                            'id' => 137,                            'fid' => 133,                            'name' => '我是k的分类1',                            'path' => '133,137',                            '_sub' => Array                                (                                    0 => Array                                        (                                            'id' => 138,                                            'fid' => 137,                                            'name' => '我是k的分类1-1',                                            'path' => '133,137,138',                                            '_sub' => Array                                                (                                                    0 => Array                                                        (                                                            'id' => 139,                                                            'fid' => 138,                                                            'name' => '我是k的分类1-1-1',                                                            'path' => '133,137,138,139',                                                            '_sub' => Array                                                                (                                                                    0 => Array                                                                        (                                                                            'id' => 140,                                                                            'fid' => 139,                                                                            'name' => '我是k的分类1-1-1-1',                                                                            'path' => '133,137,138,139,140'                                                                        )                                                                 )                                                         )                                                 )                                         )                                 )                         )                 )         ),     2 => Array        (            'id' => 132,            'fid' => 0,            'name' => 'j',            'path' => 132        ) );$temp = array();function test($array,&$temp) { 	    foreach ($array as $k=>$v) {            if (array_key_exists('_sub', $v)) {                 $temp[]=array_slice($v, 0,4);                test($v['_sub'],$temp);             } else { 				array_push($temp, $v);             }    } } test($arr,$temp);print_r($temp);?>
Copy after login

你把函数修改为

function find_child($ar) {  foreach($ar as $v) $t[$v['id']] = $v;  foreach ($t as $k => $item){    $t[$k]['path'] = $item['id'];    if( $item['fid'] ) {      $t[$item['fid']]['_sub'][$item['id']] =& $t[$k];      $t[$k]['path'] = $t[$item['fid']]['path'] . ',' . $t[$k]['id'];    }  }  return $t;}
Copy after login
$a=array (  0 =>  array (    'id' => '134',    'fid' => '0',    'name' => 't',  ),  1 =>  array (    'id' => '133',    'fid' => '0',    'name' => 'k',  ),  2 =>  array (    'id' => '132',    'fid' => '0',    'name' => 'j',  ),  3 =>  array (    'id' => '137',    'fid' => '133',    'name' => '我是k的分类1',  ),  4 =>  array (    'id' => '136',    'fid' => '134',    'name' => '我是t的分类t2',  ),  5 =>  array (    'id' => '135',    'fid' => '134',    'name' => '我是t的分类t1',  ),  6 =>  array (    'id' => '138',    'fid' => '137',    'name' => '我是k的分类1-1',  ),  7 =>  array (    'id' => '139',    'fid' => '138',    'name' => '我是k的分类1-1-1',  ),  8 =>  array (    'id' => '140',    'fid' => '139',    'name' => '我是k的分类1-1-1-1',  ),);$r = find_child($a);foreach($r as $k=>$v) if(isset($v['_sub'])) unset($r[$k]['_sub']);print_r($r);
Copy after login
Array(    [134] => Array        (            [id] => 134            [fid] => 0            [name] => t            [path] => 134        )    [133] => Array        (            [id] => 133            [fid] => 0            [name] => k            [path] => 133        )    [132] => Array        (            [id] => 132            [fid] => 0            [name] => j            [path] => 132        )    [137] => Array        (            [id] => 137            [fid] => 133            [name] => 我是k的分类1            [path] => 133,137        )    [136] => Array        (            [id] => 136            [fid] => 134            [name] => 我是t的分类t2            [path] => 134,136        )    [135] => Array        (            [id] => 135            [fid] => 134            [name] => 我是t的分类t1            [path] => 134,135        )    [138] => Array        (            [id] => 138            [fid] => 137            [name] => 我是k的分类1-1            [path] => 133,137,138        )    [139] => Array        (            [id] => 139            [fid] => 138            [name] => 我是k的分类1-1-1            [path] => 133,137,138,139        )    [140] => Array        (            [id] => 140            [fid] => 139            [name] => 我是k的分类1-1-1-1            [path] => 133,137,138,139,140        ))
Copy after login

代码我先收下了,刚才看了一遍没有看懂。。。。。。  



谢谢两位,再次谢过了,分有点少请不要介意


哎  什么时候我能像2位那么强啊

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!