2010-06-24 20 views
6

İşte anlaşma. Her öğenin içinde gezinmek ve silmek istediğim bir "ağaç" veya "alt ağaç" var. Her "düğüm", altındaki diğer düğümlere bağlantılar içerebilir (sorun yok) VEYA bağlantılar içerebilir./"subtree". Belirtilen ağaçta sadece "içinde" bulunan bir işlevi nasıl oluşturabilirim?Özyinelemeli bir silme işlevi (php) oluşturma

+3

Örnek bir yapı ve istenen çıktı vermek isteyebilirsiniz – Gordon

+0

ev ödevi gibi kokuyor ... –

+0

"Ağaç" ınıza bir örnek verin ve silme işleminin nasıl yapılacağını öğrenin. – salathe

cevap

0

Sen realpath() kullanmanız gerekir gerekir:

function DeleteTree($path) 
{ 
    if (is_dir($path) === true) 
    { 
     $path = realpath($path); 
     $files = array_diff(scandir($path), array('.', '..')); 

     foreach ($files as $file) 
     { 
      $file = realpath($path . '/' . $file); 

      // file is within tree 
      if (substr($file, 0, strlen($path)) == $path) 
      { 
       DeleteTree($file); 
      } 
     } 

     return rmdir($path); 
    } 

    else if (is_file($path) === true) 
    { 
     return unlink($path); 
    } 

    return false; 
} 

yukarıda aradığınız yapmalı.


Oh ... Bunun dosya sistemi ile ilgili olmadığını fark ettim ... Hata hepsi senin! : P

1

Bu, alıştığınız aynı özyinelemeli silme işlemidir. Bağlantılarınızı ayrı tutmak zorundasınız - ağaç bağlantıları için bir ağaç dışı bağlantılar için bir liste. Alternatif olarak, her bağlantı için ağaçta/ağaç dışında durumunu izleyen bir işaretiniz olabilir - ancak bağlantıyı yaptığınızda ayırt etmeniz gerekecek.