2011-10-30 6 views
0

내가하려고하는 것은 실제로이지만 많은 세부 사항을 통해 쉽게 이해할 수 있습니다. 배열에 문자열이 몇 개 있습니다. 그런 다음 다른 짧은 문자열이 보통 하나 또는 두 개의 단어가있는 다른 하나가 있습니다.배열의 모든 문자열을 다른 배열의 모든 문자열에 비교 PHP

내 앱이 두 번째 배열의 문자열 단어 중 하나를 찾으면 첫 번째 배열 문자열 중 하나에서 다음 작업으로 넘어갑니다. 예를 들어 첫 번째 배열의 문자열 중 하나가 "This is PHP Code"이고 두 번째 문자열의 문자열 중 하나가 "PHP"인 경우 다음 액션으로 진행되는 일치 항목을 찾습니다. 이 코드를 사용하여이 작업을 수행 할 수 있습니다

for ($i = 0; $i < count($Array); $i++) { 
    $Arrays = strpos($Array[$i],$SecondArray[$i]); 

    if ($Arrays === false) { 

     echo 'Not Found Array String'; 

    } 
    else { 
     echo 'Found Array String'; 

그러나 이것은 단지 루프에서 현재 인덱스 오브젝트 두번째 배열과 루프의 현재 인덱스의 첫 번째 Array 객체를 비교합니다.

두 번째 배열의 첫 번째 값에 대해 첫 번째 배열의 모든 값을 검색 한 다음 두 번째 배열의 두 번째 값에 대한 첫 번째 배열의 모든 값을 검색하도록 배열의 모든 값을 비교해야합니다 등등.

두 개의 루프를 사용해야한다고 생각하십니까? 이 시도했지만 배열에 문제가 첫 번째 값만 반환했습니다.

누구든지 도움을받을 수 있다면 감사하겠습니다! 옳은 답을 표시하고 도움이되는 의견을 +1하십시오!

감사합니다.

답변

2

는 아마 다음은 솔루션입니다. 나는 이것을하는 더 효율적인 방법이있다라고 확신한다.. 그러나 당신을위한 thats는 내가 뒤쫓아 다니는 것을 안다. 행운을 빌어 라.

+0

대단히 고마운데, 나는 이것을 두 개의 루프를 사용하여 할 길을 찾은 것처럼 시도하지 않았다. 고마워요. – ApiMail

1

먼저 데이터를 정규화 한 다음 배열 함수에서 PHP의 빌드를 사용하여 두 배열 간의 교차를 가져올 수 있습니다.

먼저 모든 단어를 포함하는 배열로 여러 단어가 들어있는 여러 문자열로 각 배열을 변환하십시오.

문자열에서 모든 단어를 가져 오는 데 유용한 기능은 str_word_count 일 수 있습니다.

그런 다음 array_intersect을 사용하여 두 "모든 단어"배열을 서로 비교하십시오. 이 같은

뭔가 :

// loop through array1 
foreach($array1 as $line) { 
    // check if the word is found 
    $word_found = false; 

    // explode on every word 
    $words = explode(" ", $line); 

    // loop through every word 
    foreach($words as $word) { 
     if(in_array($word, $array2)) { 
      $word_found = true; 
      break; 
     } 
    } 

    // if the word is found do something 
    if($word_found) { 
     echo "There is a match found."; 
    } else { 
     echo "No match found." 
    } 
} 

당신에게 당신이 원하는 결과를 제공해야 :

$words1 = array_unique(str_word_count(implode(' ', $Array), 1)); 
$words2 = array_unique(str_word_count(implode(' ', $SecondArray), 1)); 
$intersection = array_intersect($words1, $words2); 

if(count($intersection)) 
{ 
    # there is a match! 
} 
+0

안녕하세요, 대답에 감사드립니다, 나는 당신이 여기에서 의미하는 것을 안다라고 생각한다. 문제는 각 배열에 대한 색인 위치가 필요하므로 두 개의 개별 배열을 유지해야하므로 나중에 각 배열을 변수로 사용하여 저장할 수 있습니다. – ApiMail

+0

@ApiMail : 인덱스를 유지 관리 할 수 ​​있도록 배열을 함축시킬 필요가 없습니다. 데모 데이터를 질문에 추가하고 그로부터 얻고 자하는 것을 좀 더 구체적으로 지정한다면, 제가 작성한 것을 더 잘 보여주기 위해 코드 예제를 변경하는 것이 쉽습니다. – hakre

+0

고마워, 내가 두 개의 루프를 사용하여 그것을 할 수있는 방법을 발견했습니다, 대단히 감사합니다! – ApiMail

관련 문제