2012-01-17 3 views
3

abcdefg123hijklm과 같은 문자열이 있습니다. 나는 또한 여러 문자열을 포함하는 배열이 있습니다. 이제 내 abcdefg123hijklm을 확인하고 abcdefg123hijklm123이 배열에 있는지 확인하려고합니다. 어떻게해야합니까? 나는 in_array() 실 거예요?문자열을 PHP에서 문자열의 배열과 비교합니까?

고마워요?

+0

한 단어 preg_grep() – ArtisticPhoenix

답변

12

그래서 특정 문자열의 하위 문자열 ($searchstring)이 배열에 있는지 확인하고 싶습니까? 당신은 배열을 반복하고 문자열을 확인해야합니다 그렇다면 :

foreach($array as $string) 
{ 
    if(strpos($searchstring, $string) !== false) 
    { 
    echo 'yes its in here'; 
    break; 
    } 
} 

참조 : http://php.net/manual/en/function.strpos.php

당신은 문자열의 특정 부분은 당신이 필요합니다 배열에 있는지 확인하려면 substr()을 사용하여 문자열의 해당 부분을 분리 한 다음 in_array()을 사용하여 찾으십시오.

http://php.net/manual/en/function.substr.php

+2

코드 블록 (중괄호)에'echo' 부분을 넣고 닫는 중괄호 바로 앞에'break;'를 추가합니다 t - 적어도 하나의 문자열이 일치하는지 알아야 할 때 성능에 도움이됩니다. – Christian

+2

^Ack 및 구현 : – bardiir

6

또 다른 옵션과 같이, 정규 표현식을 사용하고 내파하는 것입니다 :

if (preg_match('/'.implode('|', $array).'/', $searchstring, $matches)) 
    echo("Yes, the string '{$matches[0]}' was found in the search string."); 
else 
    echo("None of the strings in the array were found in the search string."); 

그것은 조금 적은 코드, 그리고 나는 그것이 큰 검색 문자열 또는 더 효율적으로 기대 왜냐하면 검색 문자열은 배열의 모든 요소에 대해 한 번이 아니라 한 번 구문 분석되어야하기 때문입니다. (implode의 오버 헤드를 추가하더라도)

하나의 단점은 일치하는 문자열의 배열 인덱스를 반환하지 않는다는 것입니다. 따라서 필요한 경우 루프가 더 좋은 옵션이 될 수 있습니다.

$match_index = array_search($matches[0], $array); 

편집 한 다음 위 그러나 당신은 또한 코드를 찾을 수 : 이것은 당신이 당신의 문자열이 정규 표현식 특수 문자를 포함하지 않을 알고 가정합니다. 진실한 예제와 같은 영숫자 문자열의 경우, 더 복잡한 문자열을 사용하려면 먼저 이스케이프 처리해야합니다. 이 경우 루프를 사용하는 다른 솔루션은 아마도 더 간단 할 것입니다.

3

역으로 수행 할 수 있습니다. 문자열이 $ string이고 array가 $ array라고 가정합니다.

foreach ($array as $value) 
{ 
    // strpos can return 0 as a first matched position, 0 == false but !== false 
    if (strpos($string, $value) !== false) 
    { 
     echo 'Matched value is ' . $value; 
    } 
} 
+2

$ strpos()의 시작 부분에 $ 값이 있으면 false로 평가되는 0이 반환되므로 항상 작동하지 않습니다. –

관련 문제