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:
Cela coupe le premier caractère s'il n'y a pas de barre oblique du tout.
redanimalwar
@redanimalwar J'ai ajouté une autre solution
DisgruntledGoat
9
Je me demande pourquoi le $str = basename($url)ne reçoit pas plus de votes positifs, fonctionne parfaitement bien pour moi.
redanimalwar
2
@redanimalwar (1) basename est destiné aux chemins de fichiers, pas aux URL - je pense qu'il renverra toujours le même résultat, mais il peut y avoir des cas extrêmes comme des barres obliques inverses; (2) basename ne fonctionne que pour les barres obliques alors que ma réponse peut être facilement modifiée si quelqu'un d'autre veut faire la même chose avec un caractère différent.
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:
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.
DisgruntledGoat
Il semble qu'explode () soit un peu plus lent. Sur 10 000 instances, il s'agit du temps nécessaire pour les deux. substr () first: 0.013657 / 0.045038
Sampson
Peut-être plus lent, mais je préfère l'explosion ici. Plus précisément, si l'url ne contient aucun "/", le +1 dans la réponse strrpos fait exploser un désordre est capable de surmonter.
Noam
1
L'exemple jette un avis et devrait définitivement être retravaillé.
Xatenev
Oui, les données éclatées doivent être une variable
ma version, bien que le résultat final soit le même que celui affiché, permet à OP d'utiliser les autres éléments de la chaîne fractionnée s'il le souhaite.
ghostdog74
c'est la bonne réponse, puisque le titre demande après 'dernier' / dans l'url
Fabiano Shark
1
array_pop(explode("/", "http://vimeo.com/1234567")); renverra le dernier élément de l'exemple d'url
dans php7 avis Retours: PHP Notice: Only variables should be passed by reference.
billynoah
0
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)));
@redburn, l'utilisation de 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. ".
billynoah
-1
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
*/privatefunction 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 .Réponses:
Très simplement:
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
strrpos
renvoie false. Voici une version plus robuste:la source
$str = basename($url)
ne reçoit pas plus de votes positifs, fonctionne parfaitement bien pour moi.la source
Vous pouvez exploser en fonction de "/" et renvoyer la dernière entrée:
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:
la source
explode
me 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
substr
etstrrchr
:la source
la source
array_pop(explode("/", "http://vimeo.com/1234567"));
renverra le dernier élément de l'exemple d'urlla source
PHP Notice: Only variables should be passed by reference
.Two one liners - Je soupçonne que le premier est plus rapide mais le second est plus joli et différent
end()
etarray_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.la source
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.
la source