Esto corta el primer carácter si no hay ninguna barra.
redanimalwar
@redanimalwar Agregué otra solución
DisgruntledGoat
9
Me pregunto por qué $str = basename($url)no está recibiendo más votos a favor, funciona perfectamente bien para mí.
redanimalwar
2
@redanimalwar (1) basename está destinado a rutas de archivo, no a URL; creo que siempre devolverá el mismo resultado, pero puede haber casos extremos como barras invertidas; (2) el nombre de base solo funciona para barras, mientras que mi respuesta se puede modificar fácilmente si alguien más quiere hacer lo mismo con un carácter diferente.
Eso se basa en soplar la cuerda, algo que no es necesario si sabes que el patrón de la cuerda en sí no cambiará pronto. Alternativamente, podría usar una expresión regular para ubicar ese valor al final de la cadena:
explodesiempre me parece más alto, aunque nunca lo he cronometrado para ver qué tan rápido es.
DisgruntledGoat
Parece que explotar () es un poco más lento. En 10k instancias, esta es la cantidad de tiempo necesaria para ambos. substr () primero: 0.013657 / 0.045038
Sampson
Podría ser más lento, pero prefiero explotar aquí. Específicamente, si la URL no contiene ningún "/", el +1 en la respuesta strrpos hace que explote un desastre que pueda superar.
Noam
1
El ejemplo arroja un aviso y definitivamente debería ser reelaborado.
en php7 devoluciones: PHP Notice: Only variables should be passed by reference.
billynoah
0
Dos líneas simples: sospecho que la primera es más rápida, pero la segunda es más bonita y diferente , end()y array_pop()puede pasar el resultado de una función directamente a current()sin generar ningún aviso o advertencia, ya que no mueve el puntero ni altera la matriz.
$var ='http://www.vimeo.com/1234567';// VERSION 1 - one liner simmilar to DisgruntledGoat's answer above
echo substr($a,(strrpos($var,'/')!==false? strrpos($var,'/')+1:0));// VERSION 2 - explode, reverse the array, get the first index.
echo current(array_reverse(explode('/',$var)));
@redburn, el uso de end()esta forma en php 5.4+ y versiones posteriores arrojará un aviso. De acuerdo con los documentos: " debes pasarle una variable real y no una función que devuelva una matriz porque solo las variables reales pueden pasarse por referencia ".
Billynoah
-1
Aquí hay una hermosa función dinámica que escribí para eliminar la última parte de la URL o ruta.
/**
* remove the last directories
*
* @param $path the path
* @param $level number of directories to remove
*
* @return string
*/privatefunction removeLastDir($path, $level){if(is_int($level)&& $level >0){
$path = preg_replace('#\/[^/]*$#','', $path);return $this->removeLastDir($path,(int) $level -1);}return $path;}
s($str)->afterLast('/')
útil, como se encuentra en esta biblioteca independiente .Respuestas:
Muy simple:
strrpos obtiene la posición de la última aparición de la barra; substr devuelve todo después de esa posición.
Como lo menciona redanimalwar, si no hay una barra, esto no funciona correctamente ya que
strrpos
devuelve falso. Aquí hay una versión más robusta:fuente
$str = basename($url)
no está recibiendo más votos a favor, funciona perfectamente bien para mí.fuente
Puede explotar basándose en "/" y devolver la última entrada:
Eso se basa en soplar la cuerda, algo que no es necesario si sabes que el patrón de la cuerda en sí no cambiará pronto. Alternativamente, podría usar una expresión regular para ubicar ese valor al final de la cadena:
fuente
explode
siempre me parece más alto, aunque nunca lo he cronometrado para ver qué tan rápido es.Puede utilizar
substr
ystrrchr
:fuente
fuente
array_pop(explode("/", "http://vimeo.com/1234567"));
devolverá el último elemento de la URL de ejemplofuente
PHP Notice: Only variables should be passed by reference
.Dos líneas simples: sospecho que la primera es más rápida, pero la segunda es más bonita y diferente ,
end()
yarray_pop()
puede pasar el resultado de una función directamente acurrent()
sin generar ningún aviso o advertencia, ya que no mueve el puntero ni altera la matriz.fuente
end()
esta forma en php 5.4+ y versiones posteriores arrojará un aviso. De acuerdo con los documentos: " debes pasarle una variable real y no una función que devuelva una matriz porque solo las variables reales pueden pasarse por referencia ".Aquí hay una hermosa función dinámica que escribí para eliminar la última parte de la URL o ruta.
fuente