我有一個2維PHP數組,我需要將其轉入樹中。每個內部數組中的'路徑'值是當前節點的枚舉路徑。 (我從Bill Karwin的關於SQL反模式的書中得到了這個想法)。如何將此PHP數組結構轉換爲多維樹?
所以,我開始與陣列看起來是這樣的:
array(
[1] => array('name' => 'Animals', 'path' => '1/'),
[2] => array('name' => 'Birds', 'path' => '1/3/'),
[3] => array('name' => 'Cockatoos', 'path' => '1/3/5/'),
[4] => array('name' => 'Fish', 'path' => '1/2/'),
[5] => array('name' => 'Kookaburras', 'path' => '1/3/4/')
)
正如你可能已經收集,外數組的索引是沒有意義的。我只是在'name'上按字母順序排列了內部數組,而PHP在外部數組上指定了數字索引。就「路徑」值而言,每個路徑的最後一個分區是該節點的僞ID,即動物是節點1,鳥是節點3.您可以看到完整路徑描述了路由到給定節點,例如'鸚鵡'由'鳥'培育,由'動物'培育。
我想保留節點的字母順序,但將它們按其父級進行分組。換句話說,我想,看起來是這樣的(在其自然順序)一個數組:
[1] => 'Animals'
[1][3] => 'Birds'
[1][3][5] => 'Cockatoos'
[1][3][4] => 'Kookaburras'
[1][2] => 'Fish'
我打算遍歷這個遞歸打印樹的可視化表示。
在嘗試從一種類型的數組轉換爲另一種類型時,我的方法使用了遞歸,變量變量和正則表達式,但我一直跑到路障中。
另外,是否有我應該考慮的SPL數據結構或迭代器?
非常感謝!
編輯:對不起,應該提到,樹的深度是可變的。上面的例子有三個層次,但實際上會有更多。
金
邁克,謝謝你給這個裂縫。儘管如此,請參閱我原始問題中的編輯。樹的深度是可變的。對不起,我應該在一開始就說清楚。將有興趣看看你現在如何解決問題... –
@Kim - 這仍然沒有問題。樹的最大深度可能有多大?您可以使用相同的方式將新案例添加到案例中,以向樹添加額外深度。否則,你將不得不使用PHP的Eval()函數。 –