Obtenir la dernière partie de L'URL PHP

je me demande juste comment je peux extraire la dernière partie d'une URL en utilisant PHP.

L'URL d'exemple est:

http://domain.com/artist/song/music-videos/song-title/9393903

maintenant, comment puis-je extraire la partie finale en utilisant PHP?

9393903

Il y a toujours le même nombre de variables dans l'URL, et l'id est toujours à la fin.

42
demandé sur Whymarrh 2011-09-13 03:04:17

12 réponses

vous pouvez utiliser preg_match pour faire correspondre la partie de L'URL que vous voulez.

dans ce cas, puisque le motif est facile, nous recherchons une barre oblique vers l'avant ( \/ et nous devons l'échapper puisque la barre oblique vers l'avant indique le début et la fin du motif d'expression régulière), avec un ou plusieurs chiffres ( \d+ ) à la toute fin de la chaîne ( $ ). Les parenthèses autour du \d+ sont utilisées pour capturer la pièce que nous voulons: à savoir la fin. Nous assignons ensuite la fin que nous voulons ( $end ) à $matches[1] (pas $matches[0] , puisque c'est la même chose que $url (c'est-à-dire la chaîne entière)).

$url='http://domain.com/artist/song/music-videos/song-title/9393903';

if(preg_match("/\/(\d+)$/",$url,$matches))
{
  $end=$matches[1];
}
else
{
  //Your URL didn't match.  This may or may not be a bad thing.
}

Note: Vous pouvez ou ne voulez pas d'ajouter un peu plus de sophistication à cette expression régulière. Par exemple, si vous savez que vos chaînes D'URL vont toujours commencer par http:// alors le regex peut devenir /^http:\/\/.*\/(\d+)$/ (où .* signifie zéro ou plusieurs caractères (qui ne sont pas le caractère newline)).

23
répondu 2011-09-12 23:14:27

séparez-le et obtenez le dernier élément:

$end = end(explode('/', $url));
# or:
$end = array_slice(explode('/', $url), -1)[0];

Edit: À l'appui de apache-style-les URLs canoniques, rtrim est à portée de main:

$end = end(explode('/', rtrim($url, '/')));
# or:
$end = array_slice(explode('/', rtrim($url, '/')), -1)[0];

un autre exemple qui pourrait me sembler plus lisible est ( Demo ):

$path = parse_url($url, PHP_URL_PATH);
$pathFragments = explode('/', $path);
$end = end($pathFragments);

Cet exemple prend également en compte seulement le travail sur le chemin de la URL.

82
répondu hakre 2017-06-21 12:20:50

la façon la plus simple d'accomplir ceci, est avec basename()

echo basename('http://domain.com/artist/song/music-videos/song-title/9393903');

qui imprimera

9393903

bien sûr, s'il y a une chaîne de requête à la fin, elle sera incluse dans la valeur retournée, auquel cas la réponse acceptée est une meilleure solution.

71
répondu nikc.org 2015-11-24 02:37:59

si vous êtes à la recherche d'une version robuste qui peut traiter avec n'importe quelle forme de URLs , cela devrait faire bien:

<?php

$url = "http://foobar.com/foo/bar/1?baz=qux#fragment/foo";
$lastSegment = basename(parse_url($url, PHP_URL_PATH));
13
répondu Peter 2013-05-14 15:39:08
$id = strrchr($url,"/");
$id = substr($id,1,strlen($id));

Voici la description de la fonction strrchr : http://www.php.net/manual/en/function.strrchr.php

j'Espère que c'est utile!

12
répondu Tamer Shlash 2011-09-12 23:21:20

une autre option:

$urlarray=explode("/",$url);
$end=$urlarray[count($urlarray)-1];
3
répondu someone 2011-09-12 23:21:30

l'une des solutions les plus élégantes était ici obtenir des caractères après le dernier / dans l'url

by DisgruntledGoat

$id = substr($url, strrpos($url, '/') + 1);

strrpos obtient la position de la dernière occurrence de la barre oblique; substr retourne tout après cette position.

3
répondu Robert Sinclair 2017-05-23 11:47:28

une doublure: $page_path = end(explode('/', trim($_SERVER['REQUEST_URI'], '/')));

Obtenir URI, couper des barres obliques, de les convertir en tableau, prenez la dernière partie de la

2
répondu Justin 2015-08-10 17:25:15

cela fera le travail facilement pour obtenir la dernière partie de L'URL requise

$url="http://domain.com/artist/song/music-videos/song-title/9393903";
$requred_string= substr(strrchr($url, "/"), 1);

vous obtiendrez la chaîne après le premier " / " à partir de la droite.

1
répondu XxANxX 2014-04-25 05:01:21

1-liner

$end = preg_replace( '%^(.+)/%', '', $url );

// if( ! $end ) no match.

cela enlève tout simplement tout avant la dernière coupure, y compris elle.

0
répondu Jorge Orpinel 2014-10-24 17:52:09

Une ligne de travail réponse:

$url = "http://www.yoursite/one/two/three/drink";
echo $end = end((explode('/', $url)));

sortie: boisson

0
répondu George Chalhoub 2014-11-25 13:10:30
$mylink = $_SERVER['PHP_SELF'];
$link_array = explode('/',$mylink);
echo $lastpart = end($link_array);
0
répondu Shuhad zaman 2015-07-15 16:23:12