2010-06-24 11 views
6

Aquí está el trato. Tengo un "árbol" o un "subárbol" que quiero navegar y eliminar cada elemento. Cada "nodo" puede contener enlaces a otros nodos debajo de él (no hay problema) O puede contener enlaces FUERA de ese "árbol" en particular/"subárbol". ¿Cómo puedo crear una función que solo elimine "dentro" del árbol especificado?Creando una función de eliminación recursiva (en php)

+3

es posible que desee dar un ejemplo de estructura y la salida deseada – Gordon

+0

huele tarea ... –

+0

Dé un ejemplo de su "árbol" y cómo la eliminación debe funcionar. – salathe

Respuesta

0

Es necesario utilizar realpath():

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; 
} 

lo anterior debe hacer lo que usted está buscando.


Oh ... Me acabo de dar cuenta de que esto puede no estar relacionado con el sistema de archivos ... ¡El error es todo tuyo! : P

1

Esta es la misma eliminación recursiva a la que está acostumbrado. Solo tiene que mantener sus enlaces separados: una lista para enlaces dentro del árbol, y otra para enlaces fuera del árbol. Alternativamente, puede tener un indicador que haga un seguimiento del estado en árbol/fuera de árbol para cada enlace, pero tendrá que distinguir cuándo crea el enlace.

Cuestiones relacionadas