답변:
아주 간단하게 :
$id = substr($url, strrpos($url, '/') + 1);
strrpos 는 슬래시의 마지막 발생 위치를 가져옵니다. substr 은 그 위치 이후의 모든 것을 반환합니다.
redanimalwar에서 언급했듯이 슬래시가 없으면 strrpos
false를 반환 하므로 올바르게 작동하지 않습니다 . 다음은보다 강력한 버전입니다.
$pos = strrpos($url, '/');
$id = $pos === false ? $url : substr($url, $pos + 1);
$str = basename($url)
더 많은 찬성표를 얻지 못하고 나를 위해 완벽하게 잘 작동 하는지 궁금 합니다.
$str = basename($url);
당신이 할 수 폭발 을 기반으로 "/", 마지막 항목을 반환 :
print end( explode( "/", "http://www.vimeo.com/1234567" ) );
그것은 현을 부수는 것을 기반으로하며, 현 자체의 패턴이 곧 바뀌지 않을 것이라는 것을 알고 있다면 필요하지 않은 것입니다. 또는 정규식을 사용하여 문자열 끝에서 해당 값을 찾을 수 있습니다.
$url = "http://www.vimeo.com/1234567";
if ( preg_match( "/\d+$/", $url, $matches ) ) {
print $matches[0];
}
explode
나는 그것이 얼마나 빠른지 시간을 정한 적이 없지만 항상 나에게 더 많은 오버 헤드처럼 보입니다.
$str = "http://www.vimeo.com/1234567";
$s = explode("/",$str);
print end($s);
두 하나 라이너 - 나는 첫 번째 빠른 의심하지만, 두 번째는 예뻐과 달리 end()
하고 array_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)));
end()
php 5.4 이상에서이 방법을 사용 하면 알림이 표시됩니다. 문서에 따르면 : " 실제 변수 만 참조로 전달할 수 있으므로 배열을 반환하는 함수가 아닌 실제 변수를 전달해야합니다. ".
다음은 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;
}
s($str)->afterLast('/')
에서 볼 수 있듯이 도움 이 될 수 있습니다 .