Fonksiyonun içinde yine aynı fonksiyonu kullanma php
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;
}
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (3)
@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
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);
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