php에서 strcspn () 및 strstr () 는 두 가지 매우 실용적인 문자열 처리 기능입니다. strcspn ()은 처음부터 발생하는 지정된 문자 세트와 일치하지 않는 문자열에서 첫 번째 문자의 위치를 계산하는 데 사용되며 strcspn ()은 다른 문자열에서 문자열의 첫 번째 발생을 찾는 데 사용됩니다. 이 두 기능은 경우에 따라 함께 사용해야하지만 조합으로 사용될 때 몇 가지 일반적인 문제가 발생할 수 있습니다. 이 기사는 이러한 문제를 분석하고 솔루션을 제공합니다.
strcspn () :
strcspn (String $ haystack, String $ charlist) : int
이 기능은 $ Haystack 의 첫 번째 문자 위치를 처음부터 발생하는 $ charlist 의 문자와 일치하지 않는 첫 번째 문자 위치를 계산하고 반환합니다. 일치하는 문자가 없으면 전체 문자열의 길이가 반환됩니다.
strstr () :
strstr (String $ haystack, String $ 니들, bool $ prever_needle = false) : String | false
이 함수는 $ 니들 하부 문자열이 처음 나타나는 $ haystack 문자열에서 위치를 반환합니다. true 로 설정되면 $ beense가 나타나기 전에 매개 변수 $ prection_needle이 부품을 반환합니다.
많은 개발자 들이이 두 기능을 함께 사용할 때 혼란스러운 주문 문제를 경험할 수 있습니다. strcspn ()는 위치를 반환하기 때문에 strstr ()는 일반적으로 문자열의 일부 위치에서 하위 문자열을 찾는 데 사용됩니다. 우연히 리버스로 호출되면 필요한 문자열 위치가 올바르게 위치하지 않을 수 있습니다.
예:
<span><span><span class="hljs-variable">$haystack</span></span><span> = </span><span><span class="hljs-string">"Hello, World!"</span></span><span>;
</span><span><span class="hljs-variable">$needle</span></span><span> = </span><span><span class="hljs-string">"World"</span></span><span>;
</span><span><span class="hljs-variable">$charlist</span></span><span> = </span><span><span class="hljs-string">",!"</span></span><span>;
</span><span><span class="hljs-variable">$position</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strcspn</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$charlist</span></span><span>); </span><span><span class="hljs-comment">// 최초의 비 코마 또는 느낌표의 위치 찾기</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strstr</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>); </span><span><span class="hljs-comment">// 찾다 "World" 거기에 있습니까? $haystack 가운데</span></span><span>
</span></span>
이 방법은 strcspn () 에 의해 얻어진 위치를 기반으로 하위 문자를 찾지 않습니다. strstr ()는 항상 문자열의 시작 부분에서 찾아옵니다.
strstr ()을 사용하기 전에 strcspn () 을 통해 올바른 시작 위치를 계산 한 다음 substr ()을 사용하여 $ haystack 의 하위 문자열을 가로 채어 올바른 검색 범위를 보장 할 수 있습니다.
<span><span><span class="hljs-variable">$position</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strcspn</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$charlist</span></span><span>);
</span><span><span class="hljs-variable">$substring</span></span><span> = </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$position</span></span><span>); </span><span><span class="hljs-comment">// 이 위치에서 구분을 시작하십시오</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strstr</span></span><span>(</span><span><span class="hljs-variable">$substring</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>); </span><span><span class="hljs-comment">// 在子字符串가운데찾다 "World"</span></span><span>
</span></span>
strcspn ()은 지정된 문자 세트가 없을 때 문자열의 길이를 반환하고, 대상 서브 스트링이없는 경우 strcspn ()는 false를 반환합니다. 함께 사용하면 반환 값을 제외하고 고려되지 않으면 프로그램 오류 또는 불분명 한 논리가 발생할 수 있습니다.
예:
<span><span><span class="hljs-variable">$haystack</span></span><span> = </span><span><span class="hljs-string">"Hello, World!"</span></span><span>;
</span><span><span class="hljs-variable">$needle</span></span><span> = </span><span><span class="hljs-string">"PHP"</span></span><span>;
</span><span><span class="hljs-variable">$charlist</span></span><span> = </span><span><span class="hljs-string">",!"</span></span><span>;
</span><span><span class="hljs-variable">$position</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strcspn</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$charlist</span></span><span>);
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strstr</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>); </span><span><span class="hljs-comment">// 찾을 수 없습니다 "PHP",반품 false</span></span><span>
</span></span>
위의 코드에서는 "php"가 $ haystack 에 있지 않기 때문에 strstr ()는 false를 반환합니다. 그러나 개발자는 허위를 처리하지 않아서 후속 작업 실패를 초래할 수 있습니다.
strstr ()를 사용하기 전에 서브 스트링을 성공적으로 찾을 수 있는지 확인하십시오.
<span><span><span class="hljs-variable">$position</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strcspn</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$charlist</span></span><span>);
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strstr</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"서브 스트링을 찾을 수 없습니다!"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"서브 스트링이 발견되었습니다:"</span></span><span> . </span><span><span class="hljs-variable">$result</span></span><span>;
}
</span></span>
strcspn () 및 strstr () 는 둘 다 문자열 조작 함수이며, 이는 많은 양의 데이터를 자주 호출 할 때 성능에 영향을 줄 수 있습니다. 특히 루프에서, strcspn () 및 strstr () 의 반복 계산은 불필요한 반복으로 이어질 수 있습니다. 특히 다중 하위 문자 또는 문자 세트가 여러 번 찾아야 할 때.
해결책 :
루프 전에 대상 문자열을 전처리하여 각 반복에서 반복 통화를 피하십시오.
<span><span><span class="hljs-variable">$haystack</span></span><span> = </span><span><span class="hljs-string">"Hello, World!"</span></span><span>;
</span><span><span class="hljs-variable">$needle</span></span><span> = </span><span><span class="hljs-string">"World"</span></span><span>;
</span><span><span class="hljs-variable">$charlist</span></span><span> = </span><span><span class="hljs-string">",!"</span></span><span>;
</span><span><span class="hljs-variable">$position</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strcspn</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$charlist</span></span><span>);
</span><span><span class="hljs-variable">$substring</span></span><span> = </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$position</span></span><span>);
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strstr</span></span><span>(</span><span><span class="hljs-variable">$substring</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>);
</span><span><span class="hljs-comment">// 추가 작업</span></span><span>
</span></span>
초기 위치를 계산하고 처리 할 하위 문자열을 추출하여 불필요하게 반복되는 검색을 피할 수 있습니다.
PHP에서 strcspn () 및 strstr ()를 사용할 때, 일반적인 문제는 주로 기능 호출 순서, 반환 값 처리 및 성능 최적화에 중점을 둡니다. 이 두 기능의 반환 값을 이해하고 오류 검사 수행을 수행하면 일반적인 함정을 효과적으로 피할 수 있습니다. 또한 많은 양의 데이터를 효율적으로 처리하고 합리적인 전처리 및 반복 계산을 피하는 것이 중요합니다.
이 기사의 도입을 통해 모든 사람이 실제 개발 에서이 두 기능을 더 잘 활용하여 코드의 안정성과 효율성을 향상시킬 수 있기를 바랍니다.