父子無限分類原始數組 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 ))。。。。真心求代碼
回複討論(解決方案)
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);?>
你把函數修改為
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;}
$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);
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 ))
代碼我先收下了,剛才看了一遍沒有看懂。。。。。。
謝謝兩位,再次謝過了,分有點少請不要介意
哎 什麼時候我能像2位那麼強啊