Arama Sonuçları ‘php recursive’

Php Recursive ile Sonsuz Alt Kategori

Elimizde aşağıdaki gibi bi dizi var ve biz bunu recursive ile derin kategori haline getirmek istiyoruz.

Kendi kendisini doğrudan veya dolaylı olarak çağıran fonksiyonlara özyineli (recursive) fonksiyonlar adı verilir.

Derin kategori yani sonsuz alt kategori mantığına göre çalışma yapmak için, bir tane ekstra sütun oluşturuyoruz tablomuza ve bunun adına üst diyoruz, bu sütunda üst kategorinin id’sini yayınlıyoruz.

Array
(
    [5] => Array
        (
            [id] => 5
            [isim] => Citroen
            [ust] => 0
            [altkategori] => Array
                (
                    [6] => Array
                        (
                            [id] => 6
                            [isim] => Citroen Jumper
                            [ust] => 5
                            [altkategori] => Array
                                (
                                    [7] => Array
                                        (
                                            [id] => 7
                                            [isim] => Citroen Jumpy
                                            [ust] => 6
                                            [altkategori] => Array
                                                (
                                                )

                                        )

                                )

                        )

                    [8] => Array
                        (
                            [id] => 8
                            [isim] => Berlingo
                            [ust] => 5
                            [altkategori] => Array
                                (
                                )

                        )

                    [9] => Array
                        (
                            [id] => 9
                            [isim] => C1
                            [ust] => 5
                            [altkategori] => Array
                                (
                                )

                        )

                )

        )

    [1] => Array
        (
            [id] => 1
            [isim] => Peugeot
            [ust] => 0
            [altkategori] => Array
                (
                    [4] => Array
                        (
                            [id] => 4
                            [isim] => Peugeot Boxer
                            [ust] => 1
                            [altkategori] => Array
                                (
                                )

                        )

                    [2] => Array
                        (
                            [id] => 2
                            [isim] => Peugeot Partner
                            [ust] => 1
                            [altkategori] => Array
                                (
                                )

                        )

                    [3] => Array
                        (
                            [id] => 3
                            [isim] => Peugeot Partner Tepee
                            [ust] => 1
                            [altkategori] => Array
                                (
                                )

                        )

                )

        )

)

Şimdi de bu döngüyü yayınlamaya geçiyoruz.

                echo rec($kategoriler);

                function rec($kategoriler) {
                    $sonuc = "<ul>\n";
                    foreach ($kategoriler as $goster) {
                        $sonuc .= '<li><a href="' . site_url('kategori/' . $goster["id"] . '/' . sef_link($goster["isim"]) . '.html') . '">';
                        $sonuc .= '' . $goster["isim"] . '</a></li>';
                        $sonuc .= "\n";
                        if (!empty($goster["altkategori"]))
                            $sonuc .= rec($goster["altkategori"]);
                    }
                    $sonuc .= "</ul>\n";
                    return $sonuc;
                }

Düzenleme 1:
Şimdi bunu bir de select option içerisinde nasıl döndüreceğimize bakalım.

                            function rec($kategoriler, $ust, $tire) {
                                foreach ($kategoriler as $goster) {
                                    if ($goster["ust"] == 0) {
                                        $tire = 0;
                                    }
                                    if ($ust != $goster["ust"]) {
                                        $ust = $goster["ust"];
                                        $tire++;
                                    }
                                    $sonuc .= '<option>' . str_repeat('--', $tire) . $goster["isim"] . '</option>';
                                    $sonuc .= "\n";
                                    if (!empty($goster["altkategori"]))
                                        $sonuc .= rec($goster["altkategori"], $ust, $tire);
                                }
                                $sonuc .= "\n";
                                return $sonuc;
                            }

Yukarıdaki kod içerisinde üst kategorisi arttıkça tire işareti koyduk, kodu detaylı incelediğinizde ayrımı kolayca yapabileceksiniz.

Kategoriler