$cates = array( array( 'cid' => 1, 'cname' => 'News' , ' pid' => 0 ),
array( 'cid' => 2, 'cname' => '通知', 'pid' => 0 ),
array ( ' cid' => 3, 'cname' => '国内ニュース', 'pid' => 1 ),
array( 'cid' => 4, 'cname' => '国際ニュース', 'pid' => 1 ),
array( 'cid' => 5, 'cname' => '北京ニュース', 'pid' => ; 3 ),
array( 'cid' => 6, 'cname' => '上海ニュース', 'pid' => 3 ),
array( 'cid' = > 7 , 'cname' => '緊急通知', 'pid' => 2 ),
array( 'cid' => 8, 'cname' => '一般通知', ' pid' => 2 ), );
/** * メニューを生成 * * @param array $data 元のデータ * @param integer $pid 現在のカテゴリの親 ID * @return array 処理されたデータ */ function createMenuTree($data = array(), $pid = 0) { if (empty($data)) { return array(); }
static $level = 0;
$returnArray = array();
foreach ($data as $node) { if ($node['pid'] = = $ pid) { $returnArray[] = array( 'cid' => $node['cid'], 'cname' => $node['cname'], 'level' => ; $ level );
if (hasChild($node['cid'], $data)) { $level++;
$returnArray = array_merge($returnArray, createMenuTree($data, $node['cid '] ));
$level--; } } }
return $returnArray; }
/** * サブカテゴリの有無を確認 * * @param integer $cid 現在のカテゴリのID * @param array $data 元のデータ * @return boolean サブカテゴリの有無 */ function hasChild($cid, $data) { $ hasChild = false;
foreach ($data as $node) { if ($node['pid'] == $cid) { $hasChild = true; Break; } }
return $ hasChild; }
header('Content-Type: text/html; charset=utf-8');
$result = createMenuTree($cates);
foreach ($result as $row) { for ($ i = 0; $row['level']; $i++){ echo "t"; } >
|