この記事では、PHPの超すごい無限分類スパニングツリー法を中心に紹介しており、再帰的手法よりもはるかに高度なツリー生成手法をPHPで巧みに利用しています。はい、困っている友達は参考にしてください
時間とメモリを無駄にする Infinitus 分類の再帰探索をまだ使用していますか? この記事を読んだ後、変更する必要があると思います。
これはOSChinaで見かけた非常に簡潔なPHP Infinitus分類スパニングツリー手法ですので、たまたま引用して共有用にまとめました。
コードは次のとおりです:
関数generateTree($items){
$tree = array();
foreach($items as $item){
if(isset($items[$item['pid']])){
$items[$item['pid']]['son'][] = &$items[$item['id']];
}その他{
$tree[] = &$items[$item['id']];
}
}
$tree を返す;
}
$items = array(
1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'),
2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'),
3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'),
4 => array('id' => 4, 'pid' => 3, 'name' => '長豊県'),
5 => array('id' => 5, 'pid' => 1, 'name' => '安慶市'),
);
print_r(generateTree($items));
以下の印刷結果を確認できます:
コードをコピーします。コードは次のとおりです:
配列
(
[0] => 配列
(
[id] => 1
[pid] => 0
[名前] => 安徽省
[息子] => 配列
(
[0] => 配列
(
[id] => 3
[pid] => 1
[名前] => 合肥市
[息子] => 配列
(
[0] => 配列
(
[id] => 4
[pid] => 3
[名前] => 長豊県
)
)
)
[1] => 配列
(
[id] => 5
[pid] => 1
[名前] => 安慶市
)
)
)
[1] => 配列
(
[id] => 2
[pid] => 0
[名前] => 浙江省
)
)
上記のスパニングツリー手法は 5 行に削減できます:
コードをコピーします。コードは次のとおりです:
関数generateTree($items){
foreach($items as $item)
$items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];
戻り isset($items[0]['son']) $items[0]['son'] : array();
}
上記のInfinitus分類データのツリー構造の手法は学ぶ価値があります。しかし、このコードの実際の使用法は明らかではないと思います。フォーマットされたツリーデータを取得したい場合は、やはり再帰する必要があります:
コードをコピーします。コードは次のとおりです:
/**
* データ形式のツリーデータの取得方法
*/
$tree =generateTree($items);
関数getTreeData($tree){
foreach($tree as $t){
$t['name']をエコーします。'
';
if(isset($t['son'])){
getTreeData($t['son']);
}
}
}
getTreeData($tree);