Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/01/2004, 19:10
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
eliminar lo común entre dos strings

Tengo una duda grande. Poseo dos url con una parte en comun, la del principio, y quisiera eliminar esa parte. Es decir:

str1="http://www.miweb.com/carpeta/doc.htm";
str2="http://www.miweb.com/carpeta/otracarpeta/miotrodoc.htm";

Al ejecutar la funcion con str1 (modelo) y str2 (se que va a ser la que variará), deberia devolver "otracarpeta/miotrodoc.htm"; exactamente, es decir, lo que no tiene en comun con str1.

Algo he hecho, pero resulta demasiado lento, y si no lo ejecuto en un setTimeout("function()",1); no me funciona, me da que el script se ejecuta por demasiado tiempo, como si hubiera hecho un bucle infinito. Mi codigo es este:


Código PHP:
function prepararRUTA(ruta) {
    
//  (por bloques de directorios)
    
ruta=ruta.split("/");
    
direSplit=window.location.href.split("/");
    
indice=0;
    while(
ruta[indice]==direSplit[indice] && indice<ruta.length && indice<direSplit.length) {
        
ruta[indice]="eliminar";
        
indice++;
    }
    for(
a=0;a<ruta.length;a++)    //eliminamos los elementos "eliminar"
        
if(ruta[a]=="eliminar") { ruta.splice(a,1); a--; }
    
ruta=ruta.join("/");
    return 
ruta;


Lo explicare un poco. Divide ruta en directorios (split("/")) y hace lo propio con la direccion actual (que seria str1, la url fija). Mientras los elementos de ruta y direSplit sean iguales, a ese elemento de ruta que se está tratando se le otorga el valor "eliminar". El bucle while termina si los directorios llegan a ser diferentes o si indice es mayor que alguno de los dos length (de ruta y direSplit). Despues recorremos ruta para localizar los elementos que contengan "eliminar" y los eliminamos del array (modificando su length, con el metodo splice poco conocido -al menos por mi-). Entonces deshacemos el split("/") con join("/") y la cadena esta preparada para ser devuelta.


Lo dicho, funcionar me funciona, pero es demasiado lento. Ojala se les ocurra alguna manera mas sencilla para solucionarlo.

Un saludo
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.