2012-06-21 176 views
0

我試圖使用自動完成來搜索一些文件,但它不工作,我不知道爲什麼。使用自動完成搜索文件

會做一個簡單的自動完成與數據庫結果工作的一個例子:

$items = array(); 
while(!$res->EOF){ 

    $descPi = "PI: ".$res->fields["FIELD1"]; 
    $descEmb = " - EMB: ".$res->fields["FIELD2"]."/".$res->fields["FIELD3"]."/".$res->fields['FIELDS4']; 
    $origem = " - ORI: ".$res->fields['FIELD5']; 
    $fornec = " - FOR: ".$res->fields['FIELD6']; 

    $items[$descPi.$descEmb.$origem.$fornec] = $res->fields["FIELD1"]; 
    $res->MoveNext(); 
} 

這項工作完美,輸出這樣的陣列(通過螢火蟲):

Array 
    (
    [PI: 3221554 - EMB: 30/6/2012 - ORI: TAIWAN - FOR: SIRUBA] => 3221554 
    ) 
[ { "id": "3221554", "label": "PI: 3221554 - EMB: 30/6/2012 - ORI: TAIWAN - FOR: SIRUBA", "value": "PI: 3221554 - EMB: 30/6/2012 - ORI: TAIWAN - FOR: SIRUBA" } ] 

完美。


,現在我已經差不多了,但搜索文件,其不工作

$items = array(); 
for($j=0;$j<count($files);$j++) 
{ 
    if($files[$j] != "." and $files[$j] != ".."){ 
     $items[$files[$j]] = $files[$j]; 
    } 
} 

和輸出這(通過螢火蟲):

Array 
(
    [Dock.jpg] => Dock.jpg 
    [Forest Flowers.jpg] => Forest Flowers.jpg 
    [Forest.jpg] => Forest.jpg 
    [Tree.jpg] => Tree.jpg 
) 
[ ] // return's empty 

調試代碼,我發現這strpos驗證,他說,我的陣列其返回false,而不是進入使array_push

$result = array(); 
foreach ($items as $key=>$value) { 
if (strpos(strtolower($key), $q) !== false) { 
    array_push($result, array("id"=>$value, "label"=>$key, "value" => strip_tags($key))); 
} 
if (count($result) > 11) 
    break; 
} 

所以,比較兩個陣列,我沒有發現任何差異,我失蹤了什麼?

就是這樣,任何問題,做我的客人。

+0

如果你echo /打印'strtolower($ key)'和'$ q',輸出是什麼? – swatkins

+0

'echo strtolower($ key)'='dock.jpgforest flowers.jpgforest.jpgtree.jpg'和'$ q'它是我傳遞給自動完成像12345那樣的自動完成例如 –

+1

那麼'strpos(strtolower( $ key),$ q)'試圖在「dock.jpg」中找到「12345」 - 這就是爲什麼它返回false。 – swatkins

回答

1

根據以上註釋,strpos(strtolower($key), $q)與您對數組索引的查詢不匹配。您的索引是文件名,所以要實現匹配,您需要傳入文件名作爲$q的值。