Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取url中最后一个/后面的字符_Php_String - Fatal编程技术网

Php 获取url中最后一个/后面的字符

Php 获取url中最后一个/后面的字符,php,string,Php,String,我想在类似url的url中获取最后一个/后面的字符http://www.vimeo.com/1234567 如何使用php?您可以基于“/”并返回最后一个条目: print end( explode( "/", "http://www.vimeo.com/1234567" ) ); 这是基于将字符串拆开,如果您知道字符串本身的模式不会很快改变,那么这是不必要的。您也可以使用正则表达式在字符串末尾查找该值: $url = "http://www.vimeo.com/1234567"; if (

我想在类似
url的url中获取最后一个/后面的字符http://www.vimeo.com/1234567

如何使用php?

您可以基于“/”并返回最后一个条目:

print end( explode( "/", "http://www.vimeo.com/1234567" ) );
这是基于将字符串拆开,如果您知道字符串本身的模式不会很快改变,那么这是不必要的。您也可以使用正则表达式在字符串末尾查找该值:

$url = "http://www.vimeo.com/1234567";

if ( preg_match( "/\d+$/", $url, $matches ) ) {
    print $matches[0];
}
非常简单:

$id = substr($url, strrpos($url, '/') + 1);
获取斜杠最后一次出现的位置;返回该位置之后的所有内容


正如redanimalwar所提到的,如果没有斜杠,这将无法正常工作,因为
strrpos
返回false。下面是一个更健壮的版本:

$pos = strrpos($url, '/');
$id = $pos === false ? $url : substr($url, $pos + 1);
array\u pop(分解(“/”,”http://vimeo.com/1234567"));
将返回示例url的最后一个元素,您可以使用该元素,并且:

$str = "http://www.vimeo.com/1234567";
$s = explode("/",$str);
print end($s);

下面是我编写的一个漂亮的动态函数,用于删除url或路径的最后一部分

/**
 * 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;
}

两个一行程序-我怀疑第一个更快,但第二个更漂亮,与
end()
array\u pop()
不同,您可以将函数的结果直接传递到
current()
,而无需生成任何通知或警告,因为它不会移动指针或更改数组

$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)));

explode
对我来说似乎总是开销更大,尽管我从来没有对它计时以查看它有多快。explode()似乎有点慢。在10k实例上,这是两者所花费的时间量。substr()first:0.013657/0.045038可能会慢一些,但我更喜欢这里的爆炸。特别是,如果url不包含任何“/”,则strrpos答案中的+1会造成混乱,explode是可以克服的。该示例引发了一个通知,应该重新处理。是的,分解的数据必须是可变版本,尽管最终结果与发布的数据相同,允许OP根据自己的意愿使用拆分字符串的其他项。这是正确答案,因为标题在URL中的“last”之后询问。这对URL有效吗?basename不是用于文件路径吗?似乎工作正常,它是一个字符串函数;它不检查路径是否存在;strhr返回一个字符串,而不是一个数字。如果没有斜杠,则会对第一个字符进行剪切。@redanimalwar我添加了另一个解决方案。我想知道为什么
$str=basename($url)
没有得到更多的投票,对我来说效果非常好。@redanimalwar(1)basename用于文件路径,不是URL-我认为它将始终返回相同的结果,但可能会出现像反斜杠这样的边缘情况;(2) basename只适用于斜杠,而我的答案可以很容易地修改,如果其他人想用不同的字符做相同的事情。谢谢。简单实用!!您可能会发现有帮助,如中所示。在php7中返回通知:
PHP通知:只有变量应该通过引用传递
@redburn,在PHP5.4+及以上版本中使用
end()
这种方式将抛出通知。根据docs的说法:“您必须传递一个实变量,而不是返回数组的函数,因为只有实变量可以通过引用传递。”。
/**
 * 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;
}
$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)));