的strpos()函數返回匹配的子指數,這意味着它可能返回0
:
strpos('foo', 'f'); // 0
如果沒有找到子串,它將返回FALSE
。
strpos('foo', 'z'); // FALSE
因爲無論0
和FALSE
是falsy值(這意味着他們都評價爲布爾FALSE
),您將需要使用嚴格的檢查:
foreach($last as $key=>$string) {
$hits[$key] = strpos(strtolower($string . " " . $first[$key] . " " . $middle[$key]), $query) !== FALSE;
}
通知的strpos(...) !== FALSE
,而不是僅僅strpos(...)
。
(用於@baudday)編輯:
代碼:
<?php
$query = strtolower('Michael');
$last = array('Baier', 'Baker', 'Baker', 'Banfield', 'Banks', 'Barber');
$first = array('Michael', 'Michael', 'Stephanie', 'Christopher', 'Joseph', 'David');
$middle = array('Joseph', 'Daniel', 'Nicole', 'Phillip', 'Andrew', 'Daniel');
foreach ($last as $key=>$string) {
$haystack = $string . " " . $first[$key] . " " . $middle[$key] . " " . $first[$key] . " " . $middle[$key] . " " . $last[$key] . " " . $first[$key] . " " . $string . " " . $middle[$key];
$hits[$key] = strpos(strtolower($haystack), $query) !== false;
}
foreach ($hits as $key => $matches) {
if ($matches) {
echo $last[$key] . ', ' . $first[$key] . ' ' . $middle[$key] . ' (key: ' . $key . ") matches the query.\n";
}
}
輸出:
Baier, Michael Joseph (key: 0) matches the query.
Baker, Michael Daniel (key: 1) matches the query.
嘿真棒!所以這減輕了我知道他們在那裏時不會顯示的結果的問題。另一個問題仍在發生。我搜索一個名字,我得到的結果甚至不包含任何甚至接近查詢的結果。 – 2012-02-02 15:33:34
@baudday:我需要一個示例搜索術語以及您正在搜索的示例數據,以告訴您爲什麼要這樣做。 – FtDRbwLXw6 2012-02-02 15:38:31
好吧試試格式化這些名字Last,First Middle:Baier,Michael Joseph;貝克,邁克爾丹尼爾;貝克,斯蒂芬妮妮可;班菲爾德克里斯托弗菲利普;銀行,約瑟夫安德魯;理髮師,大衛丹尼爾; 現在在該列表中搜索Michael。它應該返回整個列表。將在單獨的評論中發佈我的搜索代碼。 – 2012-02-02 16:20:23