2014-01-27 2 views
1

배열에서 단어 (영역) 목록을 검색하려고합니다.일부 PHP 일치 in_array()

그러나 어쩌면 배열의 단어 (영역)는 2 단어입니다. 나는 이것이 될 것입니다 가정으로 배열

즉 ("밀턴 케인즈는"그래서 "밀튼은"배열에있는 두 단어를 분할하지 않고,

내가이 작업을 수행 할 수있는 방법이 있나요

일치하지 않을 것입니다 서버에 큰 부하) 아래

내가 어떤 조언을 항상,

foreach (preg_split("/(\s)|(\/)|(\W)/", $words) as $word){     
    if (in_array($word, $areaArray)){ 
     $AreaID[] = array_search($word, $areaArray); 
    } 
} 

감사를 뭐하는 거지의 예입니다! 경기의 경우를 구분하기 위해

$re = sprintf('/\b%s\b/', preg_quote($search, '/')); 
// ... 
if (preg_grep($re, $areaArray)) { 
    // we have a match 
} 

당신은 선택할 수 있습니다 : 당신은

$search='Milton Keynes'; 
foreach ($areaArray as $key => $value) { 
if (preg_match('~'.preg_quote($search).'~i',$value)) { 
    echo "$key"; 
} 
} 
+0

'in_array'는 정확한 일치에서만 작동합니다. 배열을 반복하고 부분 일치를 직접 찾아야합니다. – CBroe

+0

단어 목록을 준비하여 'Milton | Keys | ...'대안을 사용하고 ['preg_grep'] (http://php.net/preg_grep)을 사용하십시오. – mario

답변

0

/i 수정자를 추가하십시오.

+1

'preg_quote()'에 "special"문자가 들어있을 때 패턴이 깨지지 않도록 추가하고 싶습니다. –

+0

구문 오류가 있습니다. 'search'는'$ search'이어야합니다. 또한, 왜 거기에 여분의 따옴표를 사용합니까? –

+0

@AmalMurali 감사합니다, 고정, 오타되었습니다 –

0

당신은 preg_grep() 사용할 수 있습니다,이 기능처럼 MySQL로 유사한 작동 값을 찾기 위해 정규 표현식을 사용할 수 있습니다

+0

이것은 대소 문자를 구분하지 않고 정확한 일치를 위해 작동합니다 –

+0

@EmilioGort 그 의미가 확실하지 않습니다. 그게 효과가 없다고 말하는거야? –

+0

그것은 작동합니다 ... op에 정규 표현식의 경계를 설명합니다. –