【发布时间】:2017-12-03 06:34:11
【问题描述】:
我正在尝试设置从 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 获取数据到自动完成都是对此的要求。不幸的是,这三个规定不受我控制。
【问题讨论】:
-
浏览量很多但没有回复——我难倒大众了吗?来吧,伙计们!在这里帮我一把!