2011-01-19 78 views
31

Estoy tratando de obtener el último nombre de la carpeta de una ruta que almaceno en una cadena.Cómo obtener el último directorio de una ruta en una cadena

por ejemplo:Home/new_folder/test

result = test 
+0

Gracias a todos;) todos son correctos – Rickstar

+2

debes aceptar un ans nosotros somos. Tal vez el primero que resolvió su problema o uno que agregó información importante/útil al tiempo que proporciona la respuesta correcta. – acm

+0

Hecho, por cierto, gracias de nuevo – Rickstar

Respuesta

82

Uso basename

basename('Home/new_folder/test'); 
// output: test 

Como nota al margen de los que respondieron a explotar:

Para obtener el componente de nombre final de una ruta; debe usar nombre base! En caso de que su ruta sea algo así como $str = "this/is/something/", el combo end(explode($str)); fallará.

+0

La mejor respuesta, compatible tanto con Linux como con Windows. ¡Gracias! – RafaSashi

+0

El problema con esta respuesta es cuando se utilizan URL limpias (sin una extensión de script): el último elemento es un script NO la última carpeta. Compruebe mi solución sugerida ... – Ash501

+0

http://stackoverflow.com/a/40456931/622864 El problema con esta respuesta es que necesita una ruta específica de trabajo intensivo como argumento. (Soy flojo, esto simplemente no va a funcionar para mí.) Ceniza, resuelto un problema. (Pero está desordenado. Y el nombre base, no explotar es la herramienta correcta. Así que cierre Ash501.) Un trazador de líneas, dinámico, portátil, generalmente correcto, y ya empaquetado en una función para usted. De nada. – BradChesney79

1
$directory = 'Home/new_folder/test'; 
$path = explode('/',$directory); 
$lastDir = array_pop($path); 
2

estallar convierte la cadena en una matriz, a continuación, puede elegir el último valores de la matriz para que sea su resultado.

$result = end((explode('/', $path))); 
13

Puede utilizar la función basename():

$last = basename("Home/new_folder/test"); 
+1

+1 por no utilizar la manipulación de cadenas, y por utilizar la herramienta adecuada para el trabajo –

0
<?php 
$path = explode('/', $yourPathVar); 
// array_pop gives you the last element of an array() 
$last = array_pop($path); 
?> 
7

Usted puede utilizar pathinfo - pathinfo

$pathinfo = pathinfo('dir/path', PATHINFO_DIRNAME); 
$pathinfo = array_filter(explode('/', $pathinfo)); 

$result = array_pop($pathinfo); 

Esto también se asegurará de que una barra al final no significa que se devuelve una cadena en blanco.

3

Sé que es una vieja pregunta, pero esta automáticamente obtiene la última carpeta sin confundir el último elemento de la lista, que podría ser el script, y no la última carpeta real.

$url = pathinfo($_SERVER['SCRIPT_NAME'], PATHINFO_DIRNAME); 
$url_var = explode('/' , $url); 
$last_folder = end($url_var); 
0

Esto también funciona en el entorno de Windows, y también funciona si la ruta dada termina con una barra inclinada.

function path_lastdir($p) { 
    $p=str_replace('\\','/',trim($p)); 
    if (substr($p,-1)=='/') $p=substr($p,0,-1); 
    $a=explode('/', $p); 
    return array_pop($a); 
} 
2

Por lo tanto, desea algo dinámico que funcione la mayor parte del tiempo tal como está-- tal vez una función reutilizable o algo así.

Obtener el URI partir de los datos del servidor web se dio en la solicitud a través de la $ _SERVER de datos: $ _SERVER ('REQUEST_URI')

A partir de ese URI, obtener la ruta: parse_url ($ _ SERVER [ 'REQUEST_URI' ], PHP_URL_PATH))

nombre base() es la herramienta adecuada para conseguir el último directorio una vez que haya destilada un camino desde la URI completa: nombre base (parse_url ($ _ SERVER [ 'REQUEST_URI'], PHP_URL_PATH))

function lastPathDir() { 
    // get a URI, parse the path from it, get the last directory, & spit it out 
    return basename(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)); 
} 
+0

Al escribirlo, ya vi un problema que podría aparecer. Front-end mumbo jumbo de una forma u otra puede enloquecer un poco y posiblemente alimentar una URL que quizás no esperabas. – BradChesney79

Cuestiones relacionadas