Réponses:
Très simplement:
$id = substr($url, strrpos($url, '/') + 1);
strrpos obtient la position de la dernière occurrence de la barre oblique; substr renvoie tout après cette position.
Comme mentionné par redanimalwar s'il n'y a pas de barre oblique, cela ne fonctionne pas correctement car strrposrenvoie false. Voici une version plus robuste:
$pos = strrpos($url, '/');
$id = $pos === false ? $url : substr($url, $pos + 1);
$str = basename($url)ne reçoit pas plus de votes positifs, fonctionne parfaitement bien pour moi.
$str = basename($url);
Vous pouvez exploser en fonction de "/" et renvoyer la dernière entrée:
print end( explode( "/", "http://www.vimeo.com/1234567" ) );
Cela est basé sur la séparation de la chaîne, ce qui n'est pas nécessaire si vous savez que le motif de la chaîne elle-même ne changera pas de sitôt. Vous pouvez également utiliser une expression régulière pour localiser cette valeur à la fin de la chaîne:
$url = "http://www.vimeo.com/1234567";
if ( preg_match( "/\d+$/", $url, $matches ) ) {
print $matches[0];
}
explodeme semble toujours plus au-dessus de la tête, même si je ne l'ai jamais chronométré pour voir à quelle vitesse il est.
Vous pouvez utiliser substret 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);
Two one liners - Je soupçonne que le premier est plus rapide mais le second est plus joli et différent end()et array_pop(), vous pouvez passer le résultat d'une fonction directement à current()sans générer de notification ou d'avertissement car il ne déplace pas le pointeur ou ne modifie pas le tableau.
$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()cette façon dans php 5.4+ et plus jettera un avis. Selon la documentation: " vous devez lui passer une variable réelle et non une fonction renvoyant un tableau car seules les variables réelles peuvent être passées par référence. ".
Voici une belle fonction dynamique que j'ai écrite pour supprimer la dernière partie de l'url ou du chemin.
/**
* 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, comme trouvé dans cette bibliothèque autonome .