URL에서 마지막 / 뒤에 문자 가져 오기


답변:


264

아주 간단하게 :

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

strrpos 는 슬래시의 마지막 발생 위치를 가져옵니다. substr 은 그 위치 이후의 모든 것을 반환합니다.


redanimalwar에서 언급했듯이 슬래시가 없으면 strrposfalse를 반환 하므로 올바르게 작동하지 않습니다 . 다음은보다 강력한 버전입니다.

$pos = strrpos($url, '/');
$id = $pos === false ? $url : substr($url, $pos + 1);

슬래시가 전혀 없으면 첫 번째 문자가 잘립니다.
redanimalwar

@redanimalwar 나는 다른 솔루션을 추가
DisgruntledGoat

8
$str = basename($url)더 많은 찬성표를 얻지 못하고 나를 위해 완벽하게 잘 작동 하는지 궁금 합니다.
redanimalwar

1
@redanimalwar (1) basename은 URL이 아닌 파일 경로 용입니다. 항상 동일한 결과를 반환한다고 생각하지만 백 슬래시와 같은 경우가있을 수 있습니다. (2) basename은 슬래시에만 작동하지만 다른 사람이 다른 문자로 같은 일을하고 싶다면 내 대답을 쉽게 수정할 수 있습니다.
DisgruntledGoat

감사. 간단하고 실용적인 !!
Rodrigo Zuluaga

50
$str = basename($url);

1
URL에서 작동합니까? basename이 파일 경로 용이 아닙니까?
random_user_name 2013-04-05

2
잘 작동하는 것 같습니다. 문자열 함수입니다. 경로가 있는지 확인하지 않습니다.
Gifford N.

14

당신이 할 수 폭발 을 기반으로 "/", 마지막 항목을 반환 :

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

그것은 현을 부수는 것을 기반으로하며, 현 자체의 패턴이 곧 바뀌지 않을 것이라는 것을 알고 있다면 필요하지 않은 것입니다. 또는 정규식을 사용하여 문자열 끝에서 해당 값을 찾을 수 있습니다.

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

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

explode나는 그것이 얼마나 빠른지 시간을 정한 적이 없지만 항상 나에게 더 많은 오버 헤드처럼 보입니다.
DisgruntledGoat

explode ()가 약간 느립니다. 10,000 개의 인스턴스에서 이것은 둘 다에 걸리는 시간입니다. substr () first : 0.013657 / 0.045038
Sampson

더 느릴 수도 있지만 여기서 폭발하는 것이 좋습니다. 특히 URL에 "/"가 포함되어 있지 않은 경우 strrpos 답변의 +1은 엉망진창을 극복 할 수 있습니다.
Noam

1
이 예제는 통지를 던지고 확실히 재 작업되어야합니다.
Xatenev

예, 분해 된 데이터는 변수 여야합니다
ymakux

11

substrstrrchr다음을 사용할 수 있습니다 .

$url = 'http://www.vimeo.com/1234567';
$str = substr(strrchr($url, '/'), 1);
echo $str;      // Output: 1234567

다음과 더 비슷합니다. ltrim (strrchr ($ url, "/"), "/"); strchr과 숫자가 아닌 문자열을 반환
데니스 Chenu

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

3
내 버전은 최종 결과가 게시 된 것과 동일하지만 OP가 원하는 경우 분할 된 문자열의 다른 항목을 사용할 수 있습니다.
ghostdog74 09-01-01

제목이 '마지막'/ URL 뒤에 묻기 때문에 정답입니다
Fabiano Shark

1

array_pop(explode("/", "http://vimeo.com/1234567")); 예제 URL의 마지막 요소를 반환합니다.


php7에서 반환 통지 : PHP Notice: Only variables should be passed by reference.
billynoah

0

두 하나 라이너 - 나는 첫 번째 빠른 의심하지만, 두 번째는 예뻐과 달리 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)));

@redburn, end()php 5.4 이상에서이 방법을 사용 하면 알림이 표시됩니다. 문서에 따르면 : " 실제 변수 만 참조로 전달할 수 있으므로 배열을 반환하는 함수가 아닌 실제 변수를 전달해야합니다. ".
billynoah

-1

다음은 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;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.