我正在尝试设置一个从 csv 获取数据的自动完成功能。csv 有一个餐厅名称和食物类型的列表。我已经浏览了 SO 的其他一些帖子和自动完成文档,但我认为是 csv 中的两个字段,而不是一个字段让我感到困惑。
示例 csv 数据:
McDonald's,Fast Food
Olive Garden,Italian
Manny's,Steakhouse
Carino's,Italian
etc...
用户应该能够按食物类型或餐厅名称进行搜索:
<body>
<br>
<br>
<label id="lblSearchRestaurant" for="txtSearchRestaurant">Search for a Restaurant</label>
<input type="text" id="txtSearchRestaurant">
</body>
这是我为自动完成设置所做的尝试:
$(function() {
$( "#txtSearchRestaurant" ).autocomplete({
source:searchRestaurant.php,
select: function( event, ui ) {
$( "#search" ).val( ui.item.label + " / " + ui.item.actor );
return false;
}
}).data( "ui-autocomplete" )._renderItem = function( ul, item ) {
return $( "<li>" )
.data( "item.autocomplete", item )
.append( "<a><strong>" + item.label + "</strong> / " + item.actor + "</a>" )
.appendTo( ul );
};
});
我需要使用 PHP 脚本提供数据。这是我目前所拥有的:
<?php
$header = NULL;
$restaurants = array();
if (($file = fopen('restaurants.csv', 'r')) !== FALSE) {
while (($row = fgetcsv($file, 1000, ',')) !== FALSE) {
if(!$header)
$header = $row;
else
$data[] = array_combine($header, $row);
}
fclose($file);
}
$term = $_GET['term'];
foreach($restaurants as $k=>$v) {
if(preg_match("/^$term/i", $v)) { $return[] = $v; }
}
foreach($restaurants as $k => $v) {
if(preg_match("/$term/i", $v)) { $return[] = $v; }
}
echo json_encode(array_values(array_unique($return)));
以上都没有奏效,所以我尝试将餐厅数据格式化为一个数组,而不仅仅是逗号分隔的值:
[
{name:"McDonald's",type:"Fast Food"},
{name:"Olive Garden",type:"Italian"},
{name:"Manny's",type:"Steakhouse"},
{name:"Carino's",type:"Italian"}
];
<script>
我在标签和单独的文件中本地尝试过,但都没有奏效。
所以,上述方法都不适合我,但我在数组方面还不是最好的,就此而言,使用 JSON 数据,所以我可能没有正确设置 php 脚本。
如果有人能在这里指出我正确的方向,我将不胜感激。
谢谢。
注意潜在答案: jquery UI 自动完成、传入数据的格式(如上所述)以及使用 PHP 从 csv 获取数据到自动完成都是对此的要求。不幸的是,这三个规定不受我控制。