PHP オブジェクトの 1 次元配列があります。各オブジェクトには 2 つの属性があり、1 つの属性はオブジェクトの一意の ID であり、もう 1 つはその親である配列内の別のオブジェクトの一意の ID です。例えば:
array(3) {
[0]=>
object(stdClass)#1 (2) {
["ID"]=>
int(1)
["parentID"]=>
int(0)
}
[1]=>
object(stdClass)#2 (2) {
["ID"]=>
int(3)
["parentID"]=>
int(2)
}
[2]=>
object(stdClass)#3 (2) {
["ID"]=>
int(2)
["parentID"]=>
int(1)
}
}
この一次元配列を多次元配列に変換する必要があります。私はこれでいくつかの刺し傷をしましたが、ネストの各レベルのループを持たずにそれを行う方法を見つけることができません. アルゴリズムは、仮想的に無限レベルのネストに適応できる必要があります。いくつかの再帰手法を使用してみましたが、完全に正しくなることはありませんでした。
少し複雑にするために、私が取得している配列内のオブジェクトは、常に意味のある順序になっているわけではありません。上記の例でこれを再現しようとしました。ID が 3 のオブジェクトが、ID が 2 のオブジェクトの前に配列に含まれていることに気付くでしょう。したがって、おそらくソート アルゴリズムも関係しているでしょう。
理想的には、上記の例は次のようになります。
Array
(
[0] => Array
(
[ID] => 1
[parentID] => 0
[0] => Array
(
[ID] => 2
[parentID] => 1
[0] => Array
(
[ID] => 3
[parentID] => 2
)
)
)
)