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 끝에 '/'를 추가하면 최소한 하나 이상이 있는지 확인할 수 있습니다.)
이것은 아마도 내 생각에 가장 짧은 예일 것입니다.
list($first) = explode("/", $mystring);
1) 구분 기호를 찾을 list()
때까지 자동으로 문자열을 할당합니다. 2) "/"
구분 기호를 찾지
못하면 "/"
전체 문자열이 할당됩니다.
... 실제로 성능에 사로 잡히면 추가 매개 변수를 추가하여 분해 할 수 explode("/", $mystring, 2)
있는 최대 요소를 제한 할 수 있습니다 .
허용되는 답변의 한 줄 버전 :
$out=explode("/", $mystring, 2)[0];
PHP 5.4 이상에서 작동
늦어도 안 하는것 보단 낫다. 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', '/')
);
PHP 5.3의 strstr () 함수가이 작업을 수행해야합니다. 그러나 세 번째 매개 변수는 true로 설정되어야합니다.
그러나 5.3을 사용하지 않으면 아래 기능이 정확하게 작동합니다.
function strbstr( $str, $char, $start=0 ){
if ( isset($str[ $start ]) && $str[$start]!=$char ){
return $str[$start].strbstr( $str, $char, $start+1 );
}
}
나는 그것을 테스트하지는 않았지만 이것은 잘 작동해야합니다. 그리고 그것은 매우 빠릅니다.
이를 처리하는 도우미 함수를 만들 수 있습니다.
/**
* Return string before needle if it exists.
*
* @param string $str
* @param mixed $needle
* @return string
*/
function str_before($str, $needle)
{
$pos = strpos($str, $needle);
return ($pos !== false) ? substr($str, 0, $pos) : $str;
}
사용 사례는 다음과 같습니다.
$sing = 'My name is Luka. I live on the second floor.';
echo str_before($sing, '.'); // My name is Luka
current
on explode
을 사용 하면 프로세스가 쉬워집니다.
$str = current(explode("/", $str, 2));
다음과 같은 정규식을 사용해보십시오.
$s = preg_replace('|/.*$|', '', $s);
sometimes, regex are slower though, so if performance is an issue, make sure to benchmark this properly and use an other alternative with substrings if it's more suitable for you.
$string="kalion/home/public_html";
$newstring=( stristr($string,"/")==FALSE ) ? $string : substr($string,0,stripos($string,"/"));
I think this should work?
substr($mystring, 0, (($pos = (strpos($mystring, '/') !== false)) ? $pos : strlen($mystring)));
why not use:
function getwhatiwant($s)
{
$delimiter='/';
$x=strstr($s,$delimiter,true);
return ($x?$x:$s);
}
OR:
function getwhatiwant($s)
{
$delimiter='/';
$t=explode($delimiter, $s);
return ($t[1]?$t[0]:$s);
}
'development' 카테고리의 다른 글
열에서 여러 데이터 프레임을 결합하는 팬더 3 방향 (0) | 2020.06.08 |
---|---|
AngularJS의 범위에서 항목을 제거하는 방법은 무엇입니까? (0) | 2020.06.08 |
조건문을 단축하는 방법 (0) | 2020.06.08 |
GitLab 원격 : HTTP 기본 : 액세스 거부 및 치명적 인증 (0) | 2020.06.08 |
RMagick 2.13.1을 설치할 수 없습니다. (0) | 2020.06.08 |