Risposte:
Molto semplicemente:
$id = substr($url, strrpos($url, '/') + 1);
strrpos ottiene la posizione dell'ultima occorrenza della barra; substr restituisce tutto dopo quella posizione.
Come accennato da redanimalwar, se non c'è barra non funziona correttamente poiché strrpos
restituisce false. Ecco una versione più robusta:
$pos = strrpos($url, '/');
$id = $pos === false ? $url : substr($url, $pos + 1);
$str = basename($url)
non sta ottenendo più voti positivi, funziona perfettamente bene per me.
$str = basename($url);
Potresti esplodere in base a "/" e restituire l'ultima voce:
print end( explode( "/", "http://www.vimeo.com/1234567" ) );
Questo si basa sul far saltare la corda, qualcosa che non è necessario se sai che lo schema della corda stessa non cambierà presto. In alternativa, puoi utilizzare un'espressione regolare per individuare quel valore alla fine della stringa:
$url = "http://www.vimeo.com/1234567";
if ( preg_match( "/\d+$/", $url, $matches ) ) {
print $matches[0];
}
explode
Mi sembra sempre più sovraccarico, anche se non l'ho mai cronometrato per vedere quanto è veloce.
$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);
Due linee: sospetto che la prima sia più veloce ma la seconda è più carina e diversa end()
e array_pop()
puoi passare il risultato di una funzione direttamente a current()
senza generare alcun avviso o avviso poiché non sposta il puntatore o altera l'array.
$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()
questo metodo in php 5.4+ e versioni successive genererà un avviso. Secondo la documentazione: " è necessario passare una variabile reale e non una funzione che restituisce un array perché solo le variabili effettive possono essere passate per riferimento. ".
Ecco una bellissima funzione dinamica che ho scritto per rimuovere l'ultima parte dell'URL o del percorso.
/**
* 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('/')
utile, come si trova in questa libreria standalone .