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 回答