voglio ottenere i caratteri dopo l'ultimo/in un URL del tipo http://www.vimeo.com/1234567
ottenere i caratteri dopo l'ultimo/a url
Come posso fare con PHP?
voglio ottenere i caratteri dopo l'ultimo/in un URL del tipo http://www.vimeo.com/1234567
ottenere i caratteri dopo l'ultimo/a url
Come posso fare con PHP?
Molto semplice:
$id = substr($url, strrpos($url, '/') + 1);
strrpos ottiene la posizione dell'ultima occorrenza della barra; substr restituisce tutto dopo quella posizione.
Come menzionato da redanimalwar se non v'è alcuna barra questo non funziona correttamente in quanto strrpos
restituisce false. Ecco una versione più robusta:
$pos = strrpos($url, '/');
$id = $pos === false ? $url : substr($url, $pos + 1);
ooh great..it lavoro per me..grazie – deadman
soluzione semplice e piacevole, grazie. –
Questo taglio del primo carattere se non c'è nessuna barra. – redanimalwar
Si potrebbe explode sulla base di "/", e restituire l'ultima voce:
print end(explode("/", "http://www.vimeo.com/1234567"));
che si basa sulla soffia la stringa a parte, qualcosa che non è necessario se si conosce il modello della stringa presto non cambierà Si potrebbe, in alternativa, utilizzare un'espressione regolare per individuare tale 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ù sopra di me, anche se non l'ho mai programmato per vedere quanto sia veloce. – DisgruntledGoat
Sembra che explode() sia un po 'più lento. Nelle istanze 10k, questa è la quantità di tempo impiegata per entrambi. substr() first: 0,013657/0,045038 – Sampson
Potrebbe essere più lento, ma preferisco l'esplosione qui. Specificamente se l'url non contiene alcun "/" il +1 nella risposta strrpos fa esplodere un pasticcio è in grado di superare. – Noam
array_pop(explode("/", "http://vimeo.com/1234567"));
restituirà l'ultimo elemento dell'esempio URL
in php7 Avviso di resi: 'Avviso PHP: solo le variabili devono essere passate per riferimento'. – billynoah
$str = "http://www.vimeo.com/1234567";
$s = explode("/",$str);
print end($s);
la mia versione, sebbene il risultato finale sia lo stesso di quello pubblicato, consente a OP di utilizzare gli altri elementi della stringa divisa se lo desidera. – ghostdog74
questa è la risposta corretta, dal momento che il titolo chiede dopo "ultimo"/nell'url –
$str = basename($url);
Funziona su URL? Il basename non è destinato ai percorsi dei file? –
Sembra funzionare bene, è una funzione stringa; non controlla se il percorso esiste. –
Ecco una bella 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;
}
due uno liners - ho il sospetto che il primo è più veloce, ma secondo è più bella e, a differenza end()
e array_pop()
, è possibile passare il risultato di una funzione direttamente al current()
senza generare alcun preavviso o avvertimento dal momento che doesn' t spostare il puntatore o alterare la matrice.
$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)));
Si potrebbe trovare [ 's ($ str) -> dopo Last ('/')'] (https://github.com/delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str .php # L445) utile, come trovato in [questa libreria autonoma] (https://github.com/delight-im/PHP-Str). – caw