0

私は使用してjQuery autocompleteいます、以下は私のコードです

prg1_view.php

<div id="j_autocomplete">
<label>Search</label><input id="search" type="text">
</div>
$( "#search" ).autocomplete({
source: "prg1.php"      
});

prg1.php

$q = strtolower($_GET['term']);
$q = '/'.$q.'/';

$arr1 = array('a'=> 'apple','b'=> 'boy','p'=> 'pineapple');
$arr2 = array();

foreach($arr1 as $key => $value)
{
    if(preg_match($q, $value))
    array_push($arr2, $value);
}

echo json_encode($arr2);

アップルを検索しようとすると、アップルパイナップルの両方がポップアップします。期待される結果が得られますが、これを実装する必要がある他のより良いアプローチはありますか?

4

1 に答える 1

4

そのような信じられないほど基本的な文字列照合の場合は、単純なものを使用したほうがよいでしょう。

if (strpos($q, $value) !== FALSE) {
   array_push(...);
}

正規表現のオーバーヘッドを節約できます。もちろん、部分文字列ではなく、配列の内容と完全に一致する必要がある場合は、などのより良い方法がありますin_array()

正規表現を主張する場合は、preg_grep代わりにを使用してください。これにより、ループなしで実行していることが実行されます。

$matches = preg_grep('/'. preg_quote($_GET['term']) . '/', $arr1);
echo json_encode($matches);
于 2013-01-11T05:03:10.630 に答える