v2.5.2
Giriş yap

PHP İç İçe Diziler

singlestroke
963 defa görüntülendi

Bir iç içe dizi yapısı oluşturdum bu diziler şöyle;

Bilgisayar

-- Bilgisayar Bileşenleri
---- Ram
---- İşlemci
-- Çevre Birimleri
---- Monitor
---- Kulaklık

Ev Aletleri

-- Küçük Ev Aletleri

Eğer bir kategorinin alt kategorisi varsa bu subCats anahtarı ile bir alt dizin olarak tutuluyor.

Aşağıda ki kod da en altta ki dizine ulaşana kadar sürekli foreach döndürüp alt dizin var mı diye kontrol ettiriyorum ama sınırsız bir alt kategori sisteminde ve sağlıklı bir kod yapısına uygun olmadığı aşikar

Çünkü bu şekilde örnek veriyorum 5. alt dizine kadar kontrol sağlayabilirim ama ondan sonrası için sorun olur bunun yerine bir fonksiyon yazılabilir muhtemelen ancak işin içinden çıkamadım ve anlaşılır bir biçim de kodların temiz halini ekledim buyrunuz :)

Bir de sorun şu ki ekrana son hali olan diziyi basarken haliyle artık iç içe olmayan bir dizi haline dönüşecek ama ben alt kategorinin hangisi olduğunu anlamam gerekiyor ki onu ekrana bastırırken
ul - li düzenini sağlayabileyim.

Benim yazdığım kod dan daha bağımsız önerilerinize açığım benim gittiğim yoldan gitmek zorunda değilsiniz.

Şimdiden teşekkürler.

<?php
    $listcats = array();
    foreach($cats as $cat){
        
        array_push($listcats, $cat['title']);
        if (isset($cat['subCats']))
        {
            foreach($cat['subCats'] as $cat){
    
                array_push($listcats, $cat['title']);
                if (isset($cat['subCats']))
                {
                    foreach($cat['subCats'] as $cat){
            
                        array_push($listcats, $cat['title']);
                        if (isset($cat['subCats']))
                        {
                            foreach($cat['subCats'] as $cat){
                    
                                array_push($listcats, $cat['title']);
                                if (isset($cat['subCats']))
                                {
                                    foreach($cat['subCats'] as $cat){
                            
                                        array_push($listcats, $cat['title']);
                                        
                                            
                                    }
                                } 
                            }
                        }  
                    }
                } 
            }
        }
    }
    
    print_r($listcats);
?>
singlestroke
1451 gün önce

Şimdilik şöyle halletmiş gibiyim kategorileri listeleme konusun da biraz sıkıntı çekiyorum hala ama olsun :)

CategoryList fonksiyonu biraz gereksiz oldu gibi zaten hali hazır da alt alta olan dizini alıp sadece title anahtarları için tekrar alt alta koymuş olduk şimdi tekrar bu sefer de son halde ki dizin için ul + li yapısını kurmam gerek menü tasarımı yapabilmek için

function.php

        function subCats($topCat){

        include 'config.php';

        $query = $db->query("SELECT * FROM cats WHERE topcat = $topCat", PDO::FETCH_ASSOC);
        if ( $query->rowCount() ){
            
            $cats = array();

            foreach($query as $cat){

                if(!null == subCats($cat['id'])){

                    $cat['subCats'] = subCats($cat['id']);

                }

                array_push($cats, $cat);

            }  

            return $cats;
        }
        $db = null;    
    }

    function CategoryID($cats)
    {
        if (isset($cats))
        {
            $allcats = array();
            foreach($cats as $cat)
            {
                if (isset($cat['id']))
                {
                    array_push($allcats, $cat['id']);
                }
                if (isset($cat['subCats']))
                {
                    foreach($cat['subCats'] as $subcat)
                    {
                        array_push($allcats, $subcat['id']);
                        if (isset($subcat['subCats']))
                        {
                            array_push($allcats, CategoryID($subcat['subCats']));
                        }
                    }
                }
            }

        $allid = array();
        foreach ($allcats as $id){
            if(is_array($id)){
                foreach ($id as $subid){
                    array_push($allid,$subid);
                }
            }else{
                array_push($allid,$id);
            }
        }
        return $allid;
        }
    }
    
    function CategoryList($cats)
    {
        if (isset($cats))
        {
            $listcats = array();
            foreach($cats as $cat)
            {
                if (isset($cat['title']))
                {
                    array_push($listcats, $cat['title']);
                }
                if (isset($cat['subCats']))
                {
                    foreach($cat['subCats'] as $subcat)
                    {
                        array_push($listcats, $subcat['title']);
                        if (isset($subcat['subCats']))
                        {
                            array_push($listcats, CategoryList($subcat['subCats']));
                        }
                    }
                }
            }
            return $listcats;
        }
    } 

search.php

    $topCat = $_GET['cat'];
    $cats = subCats($topCat);


    print_r(CategoryList($cats));
    echo '</br></br>';
    print_r(CategoryID($cats));

Çıktı;

İlk dizinde ki her kategori isminin id değerini de tutmam lazım onun dışında şuan sıkıntı yok.

  1. dizinde ise seçilen kategori ve alt kategorilere ait ürünleri listelemek için seçilen ve alt kategorilerin id leri yer alıyor.
    
    Array ( [0] => Çevre Birimleri [1] => Klavye [2] => Array ( [0] => Mavi [1] => Kırmızı ) [3] => Fare [4] => Bilgisayar Bileşenleri )

    Array ( [0] => 3 [1] => 5 [2] => 7 [3] => 8 [4] => 6 [5] => 4 [6] => 1)