하위 문자열을 추출하려고합니다. 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', '/')
);