2012-09-27 37 views
1

我想要做的就是從用戶的輸入文本(例如讓我們說「Java程序員」),並試圖以匹配該用戶輸入做出「相關的術語」代碼我存儲在一個數組中的字符串列表,例如'Java程序員是一個好孩子','他有時玩球','java和狗互相憎恨','狗不是java程序員'無法使用strpos在PHP工作

I 「M試圖做詞匹配這樣的程序輸出數組中的匹配用戶查詢所有字(順序並不重要)

所以我想下面的代碼的輸出是所有字符串列表.. 。

「Java程序員是個好孩子」 「狗是不是Java程序員的

因爲這些條款同時包含的Java」和「程序員」按用戶輸入

這裏查詢是我寫的代碼,它不起作用。任何幫助都感激不盡。

<?php 
$relatedsearches = array(); 
$querytowords = array(); 
$string = "Java programmer"; //GET INPUT FROM USER 
$querywords = (explode(' ', $string)); 
foreach($querywords as $z) 
    { 
      $querytowords[] = $z; 
      } 

//ARRAY THAT STORES MASTER LIST OF QUERIES 

$listofsearhches = array('Java programmer is a good boy', 'he plays ball at times', 'java and dogs hate each other', ' dogs are not java programmers'); 

foreach($listofsearhches as $c) 
    { 
    for ($i=0; $i<=(count($querytowords)-1); $i++) 
     { 
     if(strpos(strtolower($c), strtolower($querytowords[$i])) === true) 
      { 
      if($i=(count($querytowords)-1)) 
       { 
       $relatedsearches[] = $c; 
       } 
      } else { break; } 
     } 
    } 

echo '<br>'; 
if(empty($relatedsearches)) 
    { 
     echo 'Sorry No Matches found'; 
    } 
    else 
    { 
    foreach($relatedsearches as $lister) 
     { 
       echo $lister; 
       echo '<br>'; 
       } 
      } 

?> 
+0

解釋什麼行不通 –

回答

0

我會做這樣的事情: -

$matches = array(); 
$string = 'java programmer'; 
$stringBits = explode(' ', $string); 
$listOfSearches = array('Java programmer is a good boy', 'he plays ball at times', 'java and dogs hate each other', ' dogs are not java programmers'); 

foreach($listOfSearches as $l) { 
    $match = true; 
    foreach($stringBits as $b) { 
    if(!stristr($l, $b)) { 
     $match = false; 
    } 
    } 
    if($match) { 
    $matches[] = $l; 
    } 
} 

if(!empty($matches)) { 
    echo 'matches: ' . implode(', ', $matches); 
} else { 
    echo 'no matches found'; 
} 

所以遍歷字符串搜索,設置一個標誌($match)的列表中,然後在$string每一個字檢查當前$listOfSearches串存在於某個地方,如果一個字不存在,將設置$match爲false。

檢查每個單詞後,如果$match仍然是true,請將當前字符串從$listOfSearches添加到$matches數組。

+0

非常感謝!除了「foreach($ strBits as $ b)」中的小錯字外,「您的代碼就像一個魅力一樣。 – kuchikoo

+0

對不起,我只在幾分鐘前注意到了自己:p – billyonecan

0

無需爆炸$string因爲你正在尋找這兩個詞的Java程序員和作爲一個字符串「Java程序員」。所以你的foreach需要像這樣

foreach($listofsearhches as $c) 
{ 
    if(strpos(strtolower($c), strtolower($string)) === true) 
     {    
      $relatedsearches[] = $c; 

     } else { break; } 

} 
+0

感謝您的答覆!您的解決方案不會爲一個字符串的工作就像「他喜歡Java和是一個程序員」,這太而不是彼此相鄰 編輯有兩個詞:不,我不是在尋找的Java「和「程序員」作爲一個字符串。任何發生的Java「和「程序員」的任何地方就是我要找的,這就是爲什麼我用爆炸 – kuchikoo

+0

oohk..i將編輯我的答案在某一時刻。 –

0
<?php 
    $string = "Java programmer"; //GET INPUT FROM USER 
    $querywords = (explode(' ', $string)); 
    $relatedsearches = array(); 
    $listofsearhches = array('Java programmer is a good boy', 'he plays ball at times', 'java and dogs hate each other', ' dogs are not java programmers'); 
    foreach ($listofsearhches as $c) { 
     foreach($querywords as $word){ 
      if(strpos(strtolower($c), strtolower($word)) !== false){ 
       if(!in_array($c, $relatedsearches)) 
        $relatedsearches[] = $c;  

       break; 
      } 
     } 
    } 

    echo '<br>'; 
    if (count($relatedsearches) < 1) { 
     echo 'Sorry No Matches found'; 
    } 
    else { 
     foreach ($relatedsearches as $lister) { 
      echo $lister; 
      echo '<br>'; 
     } 
    } 
?> 

給它一個去

+0

感謝您的回覆!這可以工作,但即使查詢中有一個單詞在其中,它也會匹配該字符串。例如,我運行這個的輸出是... 'Java程序員是一個好孩子' 'java和狗互相憎恨' '狗不是java程序員' – kuchikoo

+0

我以爲多數民衆贊成你想要的..所有你需要的是有點扭曲n您可以得到你想要的......如果你還需要,我可以修改點點,使之成爲工作,你 – Surace

+0

我對,我認爲我沒有解釋得非常好遺憾。謝謝,您的幫助非常感謝,但其他代碼發佈'deifwud'工作。 再次感謝:) – kuchikoo