ホームページ >php教程 >php手册 >ツリーアルゴリズム

ツリーアルゴリズム

WBOY
WBOYオリジナル
2016-06-21 09:15:181044ブラウズ

アルゴリズム

//テストデータ
$ar = array(
array(id=>1,pid=>0),
array(id=>2,pid=>0),
array(id =>3,pid=>2),
array(id=>4,pid=>0),
array(id=>5,pid=>3),
array(id=> ;6,pid=>1),
array(id=>7,pid=>1),
array(id=>8,pid=>6),
array(id=>9 ,pid=>7),
array(id=>10,pid=>9)
);

//ソート関数
function cmd($a,$b) {
if($a[pid ]==$b[pid]) return 0;
return $a[pid]>$b[pid]?1:-1;
}

//子の後ろに親ノードが来るのを避けるためにソートデータ内のノードが表示されます。この状況は、データを複数回変更した後によく発生します
//ソートの目的は、この状況によって引き起こされる混乱を防ぐことです
uasort($ar,cmd);

//ターゲット配列を定義します
$d = array ();
//ターゲット配列内のノードの位置を記録するために使用されるインデックス配列を定義します
$ind = array();

foreach($ar as $v) {
$v[ child] = array(); / /各ノードに子項目を追加します
if($v[pid] == 0) {
$i = count($d);
$d[$i] = $v;
$ind[$v[ id]] =& $d[$i];
}else {
$i = count($ind[$v[pid]][child]);
$ind[$v[ pid]][child][ $i] = $v;
$ind[$v[id]] =& $ind[$v[pid]][child][$i];
}
}
//結果を確認
print_r($d );
?>

ア​​ルゴリズムの特徴: B+ツリーの概念を使用して、1つのループのみでツリー配列を生成できます



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。