2011-10-30 52 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'; 

然而,這僅與第二陣列環路當前索引處的第一個數組對象進行比較的對象循環當前索引。

我需要它來比較數組中的所有值,以便它在第一個數組中爲第一個數組中的第一個值搜索每個值,然後在第一個數組中爲第二個數組中的第二個值等等。

我想我必須做兩個循環?我試過這個,但有數組只返回第一個值的問題。

如果有人可以幫助它,將不勝感激! 生病標記正確的答案和+ 1任何有用的意見!

謝謝!

回答

2

也許下面是一個解決方案:

// 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." 
    } 
} 

應該給你你想要的結果。我絕對相信有一個更有效的方法來做到這一點..但那是你2找出我quess ..祝你好運

+0

非常感謝,我沒有嘗試這個,因爲我找到了使用兩個循環的方法。非常感謝! – ApiMail

1

您可以先對數據進行規範化處理,然後使用PHP的數組函數來構建兩個數組之間的交集。

首先將每個數組轉換成多個字符串,並將其中的多個字轉換爲一個只包含所有字的數組。

從字符串中獲取所有單詞的有用函數可以是str_word_count

然後使用array_intersect將這兩個「所有單詞」數組相互比較。

事情是這樣的:

$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

相關問題