2011-09-19 114 views
1

我想尋找一個字符串,並得到相關的值,但在測試中的功能,在各次搜索詞(Title或者Would或者Post或者Ask)顯示(給)只有一個輸出Title,11,11 !!!!如何解決它?strpos不匹配

// test array 
    $arr = array('Title,11,11','Would,22,22','Post,55,55','Ask,66,66'); 
    // define search function that you pass an array and a search string to 
    function search($needle,$haystack){ 
    //loop over each passed in array element 
    foreach($haystack as $v){ 
     // if there is a match at the first position 
     if(strpos($needle,$v) == 0) 
     // return the current array element 
     return $v; 
    } 
    // otherwise retur false if not found 
    return false; 
    } 
    // test the function 
    echo search("Would",$arr); 

回答

1

問題出在strposhttp://php.net/manual/en/function.strpos.php
乾草堆是第一個參數,第二個參數是針。
你也應該做讓0

// test array 
$arr = array('Title,11,11','Would,22,22','Post,55,55','Ask,66,66'); 
// define search function that you pass an array and a search string to 
function search($needle,$haystack){ 
    //loop over each passed in array element 
    foreach($haystack as $v){ 
    // if there is a match at the first position 
    if(strpos($v,$needle) === 0) 
     // return the current array element 
     return $v; 
    } 
    // otherwise retur false if not found 
    return false; 
} 
// test the function 
echo search("Would",$arr); 
+0

一個===對比您有鷹的眼睛;-)你說得對。 +1 –

0

這個函數可以返回布爾值FALSE,但也可能返回一個非布爾值,其值爲FALSE,如0或「」。有關更多信息,請閱讀布爾部分。使用===運算符來測試此函數的返回值。

來源:http://php.net/strpos

0

改變這個檢查:

// if there is a match at the first position 
if(strpos($needle,$v) == 0) 
    // return the current array element 
    return $v; 

// if there is a match at the first position 
if(strpos($needle,$v) === 0) 
    return $v; 

// if there is a match anywhere 
if(strpos($needle,$v) !== false) 
    return $v; 

strpos returns false如果找不到字符串,但檢查false == 0是真實的,因爲php會將0視爲false。爲防止出現這種情況,您必須使用===運算符(或!==,具體取決於您要做什麼)。