Respuestas:
Muy simple:
$id = substr($url, strrpos($url, '/') + 1);
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 strrposdevuelve falso. Aquí hay una versión más robusta:
$pos = strrpos($url, '/');
$id = $pos === false ? $url : substr($url, $pos + 1);
$str = basename($url)no está recibiendo más votos a favor, funciona perfectamente bien para mí.
$str = basename($url);
Puede explotar basándose en "/" y devolver la última entrada:
print end( explode( "/", "http://www.vimeo.com/1234567" ) );
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:
$url = "http://www.vimeo.com/1234567";
if ( preg_match( "/\d+$/", $url, $matches ) ) {
print $matches[0];
}
explodesiempre me parece más alto, aunque nunca lo he cronometrado para ver qué tan rápido es.
Puede utilizar substry strrchr:
$url = 'http://www.vimeo.com/1234567';
$str = substr(strrchr($url, '/'), 1);
echo $str; // Output: 1234567
$str = "http://www.vimeo.com/1234567";
$s = explode("/",$str);
print end($s);
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)));
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.
/**
* remove the last directories
*
* @param $path the path
* @param $level number of directories to remove
*
* @return string
*/
private function 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 .