0

こんにちは、次の配列があります。

Huge_Array (356362 elements) //used splfixedarray for better handling of this array
(
    [1] => 0
    [2] => 1
    [3] => 2
    [4] => 3
    [5] => 1
    [6] => 0
)

この配列のキーは一意であり、値はキーの親を示します。1 と 6 の親は 0、2 の親は 1、3 は 2 のように....

この配列はノードの ID と親 ID を取得します。テーブル内のこれらのノードは自己参照型です。つまり、id: 234、parentid: 345、id:345、parentid:676 です。これらのノードからツリーを作成しようとすると、配列が作成され、子、親の関係が適切に保持されます。ただし、数千のような特定のノード制限に対してのみ機能します。完全なツリーは、私が既に持っている 350k ノードの配列から作成されると想定されています。私はそれをシリアル化し、ファイルの内容 (ファイルサイズ 7mb) を取得し、その配列 (正常に unserlized) を使用して、次の手順を実行してツリーを作成します。ただし、これは巨大な配列では機能しません。大きすぎるためタイムアウトしますが、小さい配列では機能します。私が間違っていることは何ですか?これを巨大な配列をサポートし、メモリ内にツリーを構築するにはどうすればよいですか?

class node {

    var $children;


    public function __construct(){
        $this->children = array();

    }

}

$tree = array();

foreach ($Huge_array as $q => $p){

    if(!isset($tree[$p]))
        $tree[$p] = new node;
    if(!isset($tree[$q]))
        $tree[$q] = new node;

    $mark[$p]=FALSE;
    $mark[$q]=FALSE;
    array_push($tree[$p]->children,$q);

}
var_dump($tree);
4

0 に答える 0