2010-05-04 6 views
29

Quindi, diciamo che ho un $somestring che detiene il valore "principale/medico/physician_view".Grab testo rimanente dopo l'ultimo "/" in una stringa php

Voglio afferrare solo "vista medico". Voglio che funzioni anche se la stringa passata era "main/physician_view" o "site/main/physician/physician_view".

Speriamo che la mia domanda abbia un senso. Qualsiasi aiuto sarebbe apprezzato!

+0

Si potrebbe trovare [ 's ($ somestring) -> 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

risposta

26

Ci sono molti modi per farlo. Probabilmente userò:

array_pop(explode('/', $string)); 
+1

'esplode' questo:' str_repeat ('/', 1337 * 1337); ' –

+2

Questo genera un avviso perché' array_pop() 'si aspetta che il parametro sia passato per riferimento, il che non è possibile per un valore di ritorno di una funzione (il restituisce il valore di 'explode'). Per evitare l'avvertimento si potrebbe dire '& explode' ma solo fino a PHP 5.4. Altrimenti, memorizza la stringa esplosa su una variabile e passala facendo riferimento a 'array_pop()'. – Arild

+0

oppure, usa "end" invece di "array_pop". Può essere meno sovraccarico a causa della minore elaborazione di array (ad esempio, la rimozione dell'ultimo elemento dalla matrice e il mantenimento della serie di array di promemoria). (curioso di sapere, che è più veloce e utilizza meno risorse - array_pop, end o substr). – bbe

45

È possibile utilizzare strrpos() per trovare l'ultima occorrenza di una stringa in un altro:

substr($somestring, strrpos($somestring, '/') + 1) 
+0

+1, il modo più veloce e più logico. –

+3

Non sempre funziona. 'path_without_slash' restituisce' ath_without_slash', e se la barra è alla fine, come 'percorso/su/file /' restituisce '(bool) false' – BadHorsie

21

Usa basename, che è stato creato per questo scopo esatto.

+1

+1, Humm ... Bello, ma rimuove anche" \ " (almeno su Windows).Fa quello che l'OP vuole ma un po 'di più del titolo della domanda. –

2

Le altre soluzioni non sempre funzionano o sono inefficienti. Ecco una funzione di utilità generale più utile che funziona sempre e può essere utilizzata con altri termini di ricerca.

/** 
* Get a substring starting from the last occurrence of a character/string 
* 
* @param string $str The subject string 
* @param string $last Search the subject for this string, and start the substring after the last occurrence of it. 
* @return string A substring from the last occurrence of $startAfter, to the end of the subject string. If $startAfter is not present in the subject, the subject is returned whole. 
*/ 
function substrAfter($str, $last) { 
    $startPos = strrpos($str, $last); 
    if ($startPos !== false) { 
     $startPos++; 
     return ($startPos < strlen($str)) ? substr($str, $startPos) : ''; 
    } 
    return $str; 
} 


// Examples 

substrAfter('main/physician/physician_view', '/'); // 'physician_view' 

substrAfter('main/physician/physician_view/', '/'); // '' (empty string) 

substrAfter('main_physician_physician_view', '/'); // 'main_physician_physician_view' 
2

Può essere in ritardo ...

Il modo più semplice integrato in PHP per afferrare l'ultima stringa dopo l'ultimo / potrebbe essere semplicemente usando la funzione pathinfo.

In realtà, si potrebbe verificare questo per te,

$urlString = 'path/to/my/xximage.png'; 

$info = pathinfo($urlString); 

si potrebbe fare:

var_dump($info); 

questo vi darà qualcosa di simile:

'dirname' => string 'path/to/my/' 
'basename' => string 'xximage.png' 
'extension' => string 'png' (length=3) 
'filename' => string 'xximage' 

modo per estrarre il immagini da quel collegamento che potevi fare:

$img=$info['basename']; 
$extension=$info['extension']; 
///etc... 

echo $img.".".$extension; //xximage.png 

Qualcosa di piccolo, ma può farvi Grow_Gray_Hair_Prematurely

0

Semplicemente è possibile utilizzare:

$id = substr($url, strrpos($url, '/')+1); 
9
$last_part = substr(strrchr($somestring, "/"), 1); 

Esempi:

php > $a = "main/physician/physician_view"; 
php > $b = "main/physician_view"; 
php > $c = "site/main/physician/physician_view"; 
php > echo substr(strrchr($a, "/"), 1); 
    physician_view 
php > echo substr(strrchr($b, "/"), 1); 
    physician_view 
php > echo substr(strrchr($c, "/"), 1); 
    physician_view 
0

Per un altro uno di linea, è possibile utilizzare il esplodere il trucco e invertire la matrice:

current(array_reverse(explode('/',$url))); 
Problemi correlati