v2.5.2
Giriş yap

Fonksiyonun içinde yine aynı fonksiyonu kullanma php

singlestroke
322 defa görüntülendi

Aşağıda ki şekilde fonksiyonun içinde yine aynı
fonksiyonu kullanmak istiyorum (php) nasıl yapabilirim ?

Böylece alt bir kategori id girerek o kategorinin altında ki tüm kategorilerin id bilgisini toplayabilirim sizce sorun ne ?

    function x(){
        x();
    }
    
    
    Yapmak İstediğim işlem ;
    
    function subCategoriesList($topCategory)
    {
        $allSubCategories = array();

        $subCategories = $this->databaseConn->query("SELECT * FROM category WHERE topCategory = {$topCategory}", PDO::FETCH_ASSOC);
        if ($subCategories->rowCount()) {

            foreach ($subCategories as $category) {

                array_push($allSubCategories, $category['id']);
                subCategoriesList($category['id']);
            }
        }
        return $allSubCategories;
    }
    
Cevap yaz
Cevaplar (3)
singlestroke
636 gün önce

@devepdogukan nasıl yani iç içe fonksiyon evet ama sonuç olarak alt kategori kalmadığı durumda fonksiyon else dışına çıkacak ve tekrar çalışmayacak neden sürekli çalışsın ki

abdullahx
636 gün önce

Ben bu tür işlemleri gönderimli fonksiyonlar ile çözüyorum. Belki şuna benzer bir işlem işinizi çözebilir. Tamamen deneysel yazdım, hatalar çıkabilir.

function subCategoriesList($topCategory, &$allSubCategories)
{
    $subCategories = $this->databaseConn->query("SELECT * FROM category WHERE topCategory = $topCategory", PDO::FETCH_ASSOC);
    if ($subCategories->rowCount()) {
        foreach ($subCategories as $category) {
            $allSubCategories[] = $category['id'];
            subCategoriesList($category['id'], $allSubCategories);
        }
    }
    return $allSubCategories;
}

$list = subCategoriesList(1, $allSubCategories);
print_r($allSubCategories);
devepdogukan
636 gün önce

Burda yapmak istediğin şey Özyineleme (recursion) fonksiyondur. Bu fonksiyonlar ilk baktığında çok kullanışlı gibi gelsede doğru bir logic ile yazılmasa pc'ye son nefesi verdirir. Fonksiyonun yapacağı işi bittiğinde sürekli kendisini çağırmasını engellemesin yoksa dediğim gibi sonsuz döngüye girer ve bir süre sonra ram patlar