約 15,000 のノードを使用して、それらから階層を構築しようとしています。ノードは決してソート可能ではなく、それぞれが無限の数の子を持つことができますが、親は常に子の前に関数に供給されます。私が持っているコードは N の値が小さい場合に機能しますが、N > 2,000 の場合、サーバーでの最大実行時間を超えてしまいます。これを行うためのより良い方法があるかどうかはわかりませんが、ここに私が持っているものがあります:
function insertNode(&$treeNode, $insertNode) {
if($insertNode['DEPTH'] <= $treeNode['DEPTH']) return false;
if($treeNode['ID'] == $insertNode['PARENT_ID']) {
$treeNode['CHILDREN'][] = $insertNode;
$treeNode['CHILD_COUNT']++;
return true;
}
else {
foreach($treeNode['CHILDREN'] as $key=>$value) {
$found = insertNode($treeNode['CHILDREN'][$key], $insertNode);
if($found) {
$treeNode['CHILD_COUNT']++;
return true;
}
}
}
}
現時点での私の最善の解決策は、再帰を数千ノードに相当する深さの構築に制限し、Javascript で、ツリーが完全に完成するまで各下位ノードのスクリプトを呼び出すことです。ただし、すべてを一度に実行できるようにしたいのですが。