Voglio get i personaggi dopo l'ultimo / in un URL come http://www.vimeo.com/1234567
Come faccio con PHP?
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'è nessuna barra questo non funziona correttamente dal momento che strrpos
restituisce false. Ecco una versione più robusta:
$pos = strrpos($url, '/'); $id = $pos === false ? $url : substr($url, $pos + 1);
$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 si conosce il model della string stessa che non cambierà presto. In alternativa, potresti usare un'espressione regolare per individuare quel valore alla fine della string:
$url = "http://www.vimeo.com/1234567"; if ( preg_match( "/\d+$/", $url, $matches ) ) { print $matches[0]; }
Puoi usare substr
e 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);
arrays_pop(explode("/", "http://vimeo.com/1234567"));
restituirà l'ultimo elemento dell'URL di esempio
Due liners: sospetto che il primo sia più veloce, ma il secondo è più arrays_pop()
e diversamente da end()
e arrays_pop()
, puoi passare il risultato di una function direttamente a current()
senza generare alcun avviso o avviso poiché non lo fa sposta il puntatore o modifica l'arrays.
$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 arrays, get the first index. echo current(arrays_reverse(explode('/',$var)));
Ecco una bellissima function dynamic che ho scritto per rimuovere l'ultima parte dell'URL o del path.
/** * 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; }