抓取最后一个”后的剩余文本/&引用;在php字符串中

抓取最后一个”后的剩余文本/&引用;在php字符串中,php,string,Php,String,因此,假设我有一个$somestring,它保存着值“main/medicine/medicine\u view” 我只想抓住“医生视图”。如果传递的字符串是“main/medicine\u view”或“site/main/medicine/medicine\u view”,我希望它也能工作 希望我的问题有意义。任何帮助都将不胜感激 您可以使用查找一个字符串在另一个字符串中最后出现的位置: substr($somestring, strrpos($somestring, '/') + 1)

因此,假设我有一个
$somestring
,它保存着值“main/medicine/medicine\u view”

我只想抓住“医生视图”。如果传递的字符串是“main/medicine\u view”或“site/main/medicine/medicine\u view”,我希望它也能工作

希望我的问题有意义。任何帮助都将不胜感激

您可以使用查找一个字符串在另一个字符串中最后出现的位置:

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

使用,它就是为了这个目的而创建的。

有很多方法可以做到这一点。我可能会使用:

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

其他解决方案并不总是有效,或者效率低下。下面是一个更有用的通用实用程序函数,它总是有效的,并且可以与其他搜索词一起使用

/**
 * 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'
/**
*获取从最后一次出现的字符/字符串开始的子字符串
*
*@param string$str主题字符串
*@param string$last在主题中搜索此字符串,并在其最后一次出现后启动子字符串。
*@return string从上次出现的$startAfter到主题字符串结尾的子字符串。如果$startAfter不存在于主题中,则返回整个主题。
*/
函数子草稿($str,$last){
$startPos=strrpos($str,$last);
如果($startPos!==false){
$startPos++;
返回($startPos
可能会迟到

PHP中内置的获取last
/
后的最后一个字符串的最简单方法是使用
pathinfo
函数

事实上,你可以自己检查一下

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

$info = pathinfo($urlString);
你可以做:

var_dump($info);
这将为您提供如下信息:

'dirname' => string 'path/to/my/' 
'basename' => string 'xximage.png'
'extension' => string 'png' (length=3)
'filename' => string 'xximage' 
因此,要从该链接中提取图像,您可以执行以下操作:

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

echo $img.".".$extension; //xximage.png
一些小东西,但会让你过早变白头发

只要你能使用:

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

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

对于另一个单线,可以使用“爆炸”技巧并反转阵列:

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

+1,哼。。。不错,但也删除了“\”(至少在Windows上)。做OP想要做的,但比问题的标题要多一点。使用
basename
,因为这种情况是最好的方法。你好,我是2K20。好的。也可用于删除get_class()返回的任何对象的命名空间,例如,“App\Entity\User”变为“User”。
explode
this:
str_repeat('/',1337*1337)
这会引发一个警告,因为
array\u pop()
希望通过引用传递参数,这对于函数返回值(explode
的返回值)是不可能的。为了避免警告,您可以说
&explode
,但只有在PHP5.4之前。否则,将分解后的字符串存储到变量中,并通过引用将其传递到
array\u pop()
。或者,使用“end”而不是“array\u pop”。由于更少的数组处理(即从数组中删除最后一个元素并保留提醒数组集),开销可能会更小。(好奇,哪个更快,使用更少的资源-array_pop、end或substr)。并不总是有效
path\u without\u slash
返回
ath\u without\u slash
,如果斜杠在末尾,比如
path/to/file/
它返回
(bool)false
,您可能会发现它很有用,如中所示。抄袭自4年前回答该问题的Michael Mrozek。
current(array_reverse(explode('/',$url)));