2011-07-14 61 views
1

我有問題,它不能檢測字符串中的每個單詞。類似於過濾器或標籤或類別或種類的..

$title = "What iS YouR NAME?"; 

$english = Array('Name', 'Vacation'); 

if(in_array(strtolower($title),$english)){ 
    $language = 'english'; 
} else if(in_array(strtolower($title),$france)){ 
    $language = 'france'; 
} else if(in_array(strtolower($title),$spanish)){ 
    $language = 'spanish'; 
} else if(in_array(strtolower($title),$chinese)){ 
    $language = 'chinese'; 
} else if(in_array(strtolower($title),$japanese)){ 
    $language = 'japanese'; 
} else { 
    $language = null; 
} 

輸出爲null .. =/

回答

2

這裏沒有真正的問題... $title中的字符串不在您正在測試的任何陣列中,即使是小寫字母。

嘗試在每個語言選項卡上對字符串測試每個單詞。

$english = Array('Name', 'Vacation'); 
$languages = array('english'=>$english, 
        'france'=>$france, 
        'spanish'=>$spanish, 
        'chinese'=>$chinese, 
        'japenese'=>$japenese); 

while($line = mysql_fetch_assoc($result)) { 
    $title = $line['title']; 
    //$lower_title = strtolower($title); stristr() instead. 

    $language_found = false; 

    foreach($languages as $language_name=>$language) { 
     idx = 0; 
     while(($language_found === false) && idx < count($language)) { 
      $word = $language[$idx]; 
      if(stristr($title, $word) !== false) { 
       $language_found = $language_name; 
      } 
      $idx++; 
     } 
    } 

    // got language name or false... 
} 

你也可以使用破當然explode字符串,併爲每種語言創建數組中的測試每個字。

+0

它的工作原理,但它給了錯誤:'警告:strpos()[function.strpos]:在/***.php空定界符在線47' – user453089

+0

你是對的,我不得不使用'strstr();'而是,我會編輯它。 – 2011-07-14 16:48:04

+0

也許解釋器不喜歡'if(strstr($ lower_title,$ word)',我會用'if(strstr($ lower_title,$ word))';-)再次編輯 – 2011-07-14 16:55:46

2

輸出是null因爲字符串"what is your name?"不以任何語言陣列。請注意,您不應該在代碼中編寫語言名稱。

相反,字典或語言陣列(以字典或對象的形式)允許將來擴展並將數據從控制邏輯中分離出來。

1

有幾個邏輯問題:

第一個問題是,你想看看是否多詞串在單個單詞的數組。這總是無法找到一個匹配。您需要用explode分解$title並循環輸入單詞。

即)$title_words = explode(' ', strtolower($title));

foreach($title_words as $word){ 
    //check language 
    //now you can use in_array and expect some matches 
} 

但是呈現第二issue.What如果一個字是多語言?

第三個問題是在您的示例中,您已將搜索字符串轉換爲小寫,但匹配數組中的所有單詞都帶有大寫首字母。 即)
$english = Array('Name', 'Vacation');應該
$english = array('name', 'vacation');

,如果你希望匹配

+0

我問是否有可能在'$ title'中用白色空間爆炸? – user453089

+0

將嘗試現在測試..給我少於5分鐘。 – user453089

+0

@ user453089 yes爆炸的第一個參數是設置爲在空白處打斷字符串的分隔符 –