2012-05-15 66 views
0

我知道這個問題之前已被問過,但我還沒有能夠獲得提供的解決方案的工作。檢查是否在字符串中找到數組中的任何項目

我試圖檢查數組中的單詞是否與所提供的字符串中的任何單詞(或單詞的一部分)匹配。

我目前有以下代碼,但它只適用於數組中的第一個單詞。其餘的人總是返回假。

「輸入」將是「乾草堆」和「值」將是「針」

function check($array) { 
    global $input; 
    foreach ($array as $value) { 
      if (strpos($input, $value) !== false) { 
        // value is found 
        return true; 
      } else { 
       return false; 
      } 
    } 
} 

實施例:

$input = "There are three"; 
if (check(array("one","two","three")) !== false) { 
    echo 'This is true!'; 
} 

在上文中,「一串有一個「返回爲真,但」有兩個「或」有三個「的字符串都返回false。

如果可以使用不涉及必須使用正則表達式的解決方案,那就太好了。謝謝!

+0

,你的問題不清楚,所以什麼確切的內容$的輸入?一個字符串,一個數組? – Sliq

+0

$ input是一個字符串,如「有三個」。我試圖檢查數組中的單詞是否與$ input字符串中的任何單詞(或單詞的一部分)匹配。 – Brian

回答

0

strpos();完全是錯在這裏,你應該簡單地嘗試

if ($input == $value) { 
    // ... 
} 

,並通過

if ($input === $value) { // there are THREE of them: = 
    // ... 
} 

你甚至可以檢查變量的類型是相同的(字符串,整數,...)

更專業的解決方案將是

in_array(); 

它檢查鍵或值的存在。

+0

這將無法匹配像OP試圖做的子字符串。 – Banaan

1

這裏的問題是,檢查總是$array的第一項後返回。如果找到匹配項,則返回false,否則返回true。在返回語句之後,函數完成並且其餘項不會被檢查。

function check($array) { 
    global $input; 
    foreach($array as $value) { 
     if(strpos($input, $value) !== false) { 
      return true; 
     } 
    } 
    return false; 
} 

當找到一個匹配,還是假的,當它在$array通過所有的值了上面只有該函數返回真。

0

這裏的問題是,你打破了函數返回語句..所以你總是在第一次比較後切出。

0

您在$array的每次迭代中都返回,因此它只會運行一次。您可以使用stristrstrstr來檢查$input中是否存在$value

像這樣:

function check($array) { 
    global $input; 
    foreach ($array as $value) { 
     if (stristr($input, $value)) { 
      return true; 
     } 
    } 
    return false; 
} 

這將然後依次通過陣列的每個元素,並返回true如果發現匹配,如果不是,循環結束則返回假之後。

如果需要檢查,如果在$input存在每個單個項目你必須做一些事情有點不同,有點像:

function check($array) { 
    global $input; 
    $returnArr = array(); 
    foreach ($array as $value) { 
     $returnArr[$value] = (stristr($input, $value)) ? true : false; 
    } 
    return $returnArr; 
} 


echo '<pre>'; var_dump(check($array, $input)); echo '</pre>'; 

// outputs 

array(3) { 
    ["one"]=> 
    bool(false) 
    ["two"]=> 
    bool(false) 
    ["three"]=> 
    bool(true) 
} 
0

你應該使用in_array()的陣列比較值。

function check($array) { 
    global $input; 
    foreach ($array as $value) { 


     if (in_array($value,$input)) 
     { 
     echo "Match found"; 
     return true; 
     } 
    else 
     { 
     echo "Match not found"; 
     return false; 
     } 
    } 
} 
+0

讓我知道這是否有效。 – shivgre

0

的原因,你的代碼不工作,是因爲你通過數組循環,但你不保存你所得到的結果,所以纔有了最後的結果「罪狀」。 在下面的代碼我通過了結果到一個名爲$output變量:

function check($array) { 
    global $input; 
    $output = false; 
    foreach ($array as $value) { 
     if (strpos($input, $value) != false) { 
      // value is found 
      $output = true; 
     } 
    } 
    return $output; 
} 

,你可以使用它像這樣:順便說

$input = "There are two"; 
$arr = array("one","two","three"); 
if(check($arr)) echo 'this is true!'; 
相關問題