Generate / loop multidimensional array yang memiliki parent dan child

Mungkin bagi beberapa orang hal ini mudah dilakukan, namun bagi sebagian yang lain, untuk melooping data array biasa menjadi array multidimensi yang memiliki parent dan child bukanlah hal yang mudah, bahkan mungkin bisa menghabiskan banyak waktu hanya untuk melakukan berbagai macam percobaan looping.

Misalnya, kita punya data sebagai berikut:

Array
(
    [0] => Array
    (
        [id] => 27
        [name] => Fruit
        [parent] => 0
    )

    [1] => Array
    (
        [id] => 30
        [name] => Banana
        [parent] => 27
    )

    [2] => Array
    (
        [id] => 33
        [name] => Yellow Banana
        [parent] => 30
    )

    [3] => Array
    (
        [id] => 34
        [name] => Grape
        [parent] => 27
    )
)

Bisakah teman-teman membayangkan? Data tersebut masih berupa data dengan array satu dimensi. Untuk menampilkan data tersebut didalam HTML misalnya, kita akan sedikit kerepotan ketika ingin memainkan sub-fruit dengan tampilan treeview.

Meskipun kita bisa coba melakukan beberapa loop, namun nanti hanya akan berputar-putar saja.

Salah satu alternatif yang bisa digunakan adalah dengan meng-generate array tersebut hingga menjadi multidimensional array atau array multi dimensi. Memang, dalam DB kita akan kerepotan untuk membuat multimensi, kita hanya bisa menyimpan berupa data, yang mana result nya seperti array yang saya tampilkan diatas.

Untuk membuat array multi dimensi dari data diatas, kita bisa melakukannya seperti ini (dalam bahasa PHP):

function GenerateParentChild($arr, $parent = 0)
   {
       $rows = Array();
       foreach($arr as $row)
       {
           if($row['parent'] == $parent)
           {
               $row['sub'] = isset($row['sub']) ? $row['sub'] : $this->GenerateParentChild($arr, $row['id']);
               $rows[] = $row;
           }
       }
       return $rows;
   } 

Dalam source code diatas, saya menggunakan model OOP pada CodeIgniter, mungkin nanti kalau teman-teman ingin menggunakannya dalam bahasa atau model yang lain, bisa teman-teman sesuaikan sesuai dengan kebutuhan.

Secara ajaib nanti resultnya akan menjadi multidimensional array, dengan tambahan index sub yang berisi data sub nya, bagi yang memiliki sub.

Bagiamana ini bisa dilakukan? Mungkin kalau teman-teman melakukan hard-looping, akan memakan banyak memori dan tidak efisien, karena kode nya akan jadi sangat panjang. Dengan source code diatas, kita bisa melakukannya karena dalam fungsi tersebut kita memanggil fungsi itu sendiri. Sehingga ada looping yang tidak perlu kita tuliskan, karena kita cukup menuliskannya sekali, dalam sebuah fungsi.

Sekian, semoga bisa bermanfaat.