Я использую 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);
Когда я пытаюсь найти яблоко , всплывают и яблоко , и ананас , ожидаемый результат - я получаю, но есть ли другой лучший подход - реализовать это?
1 ответ
Для такого невероятно простого сопоставления строк вам лучше использовать простой
if (strpos($q, $value) !== FALSE) {
array_push(...);
}
И избавьте себя от накладных расходов на регулярное выражение. И, конечно, если вам нужно только точное совпадение с содержимым массива, а не подстроками, есть способы получше, например in_array()
.
Если вы настаиваете на регулярных выражениях, используйте вместо них preg_grep
, который делает то, что вы делаете, без цикла :
$matches = preg_grep('/'. preg_quote($_GET['term']) . '/', $arr1);
echo json_encode($matches);
Похожие вопросы
Новые вопросы
php
PHP — это открытый, мультипарадигмальный, динамически типизированный и интерпретируемый язык сценариев, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.