[php] PHP 부분 문자열 추출. 첫 번째 ‘/’또는 전체 문자열 앞에 문자열을 가져옵니다.

하위 문자열을 추출하려고합니다. PHP에서 도움이 필요합니다.

다음은 작업중 인 샘플 문자열과 필요한 결과입니다.

home/cat1/subcat2 => home

test/cat2 => test

startpage => startpage

첫 번째까지 문자열을 얻고 /싶지만 존재하지 않으면 /전체 문자열을 가져옵니다.

나는 시도했다

substr($mystring, 0, strpos($mystring, '/'))

나는 그것이 위치라고 생각하고 /위치 0에서 위치로 부분 문자열을 얻는다 .

/문을 너무 크게 만들지 않고 no가있는 경우를 처리하는 방법을 모르겠습니다 .

PHP 문장을 너무 복잡하게 만들지 않고 그 경우를 처리하는 방법이 있습니까?



답변

사용하다 explode()

$arr = explode("/", $string, 2);
$first = $arr[0];

이 경우, php가 필요한 것보다 더 이상 문자열을 스캔하지 않도록 limit매개 변수를 사용하고 explode있습니다.


답변

가장 효율적인 솔루션은입니다 strtok기능 :

strtok($mystring, '/')

예를 들면 다음과 같습니다.

$mystring = 'home/cat1/subcat2/';
$first = strtok($mystring, '/');
echo $first; // home

$mystring = 'home';
$first = strtok($mystring, '/');
echo $first; // home


답변

$first = explode("/", $string)[0];


답변

이건 어때?

substr($mystring.'/', 0, strpos($mystring, '/'))

mystring 끝에 ‘/’를 추가하면 최소한 하나 이상이 있는지 확인할 수 있습니다.)


답변

허용되는 답변의 한 줄 버전 :

$out=explode("/", $mystring, 2)[0];

PHP 5.4 이상에서 작동


답변

이것은 아마도 내 생각에 가장 짧은 예일 것입니다.

list($first) = explode("/", $mystring);

1) 구분 기호를 찾을 list()때까지 자동으로 문자열을 할당합니다.
2) "/"구분 기호를 찾지
못하면 "/"전체 문자열이 할당됩니다.

… 실제로 성능에 사로 잡히면 추가 매개 변수를 추가하여 분해 할 수 explode("/", $mystring, 2)있는 최대 요소를 제한 할 수 있습니다 .


답변

늦어도 안 하는것 보단 낫다. php에는 미리 정의 된 기능이 있습니다. 여기 좋은 방법이 있습니다.

strstr

일치하기 전에 부품을 얻으려면 before_needle (3 번째 매개 변수)을 http://php.net/manual/en/function.strstr.php 로 설정 true
하십시오.

function not_strtok($string, $delimiter)
{
    $buffer = strstr($string, $delimiter, true);

    if (false === $buffer) {
        return $string;
    }

    return $buffer;
}

var_dump(
    not_strtok('st/art/page', '/')
);