我正在尝试使用我的PHP脚本将CSV表转换为JSON数组,以便根据用户的输入为我的JQuery自动完成字段过滤结果。这是我到目前为止的PHP代码:
<?php
$file="partstable.csv";
$csv= file_get_contents($file);
$input = $_GET["term"];
$lines = explode("\n", $csv);
$head = str_getcsv(array_shift($lines));
$array = array();
foreach ($lines as $line) {
$array[] = array_combine($head, str_getcsv($line));
}
$result = array_filter($array, function ($item) use ($input) {
if (stripos($item, $input) !== false) {
return true;
}
return false;
});
print json_encode($result);
?>
CSV:
label,Number,PartDesc,Source
"First Part",10002345,This is a description of the part,1
"Second Part",10006789,This is also a part description,1
.....
JQuery的:
$(function() {
$('#partName').autocomplete({
minLength: 2,
source: "readcsv.php",
select: function ( event, ui ) {
$("#partNumber").text(ui.item.Number);
$("#partDesc").text(ui.item.PartDesc);
if (ui.item.Source == 1 && document.getElementById('radio1').checked) {
$("#partSource").html("<div class='ui-widget'><div class = 'ui-state-highlight ui-corner-all' style='margin=top:5px;'><p><span class='ui-icon ui-icon-alert' style='float: left; margin-right: 6px;'></span> TEXT</p></div></div>");
}
else if (ui.item.Source == 1 && document.getElementById('radio2').checked) {
$("#partSource").html("<div class='ui-widget'><div class = 'ui-state-highlight ui-corner-all' style='margin=top:5px;'><p><span class='ui-icon ui-icon-alert' style='float: left; margin-right: 6px;'></span> TEXT </p></div></div>");
}
else if (ui.item.Source == 2) {
$("#partSource").html("<div class='ui-widget'><div class = 'ui-state-highlight ui-corner-all' style='margin=top:5px;'><p><span class='ui-icon ui-icon-alert' style='float: left; margin-right: 6px;'></span> TEXT</p></div></div>");
}
else {
$("#partSource").html("<div class='ui-widget'><div class = 'ui-state-highlight ui-corner-all' style='margin=top:5px;'><p><span class='ui-icon ui-icon-alert' style='float: left; margin-right: 6px;'></span> TEXT</p></div></div>");
}
}
});
})
但是,这仍然会导致“自动完成”文本框为我提供数组中的所有标签。我知道我的搜索页面正在将搜索字符串正确传递给我的PHP脚本,因此错误在于此脚本。如果我理解我的代码,它应该逐行浏览我的数组,只返回标签start包含$input
中输入的搜索字符串,对吗?
答案 0 :(得分:0)
编辑:
使用它(我已经测试过了):
$result = array_filter($array, function ($item) use ($input) {
foreach($item as $field){
if(stripos($field, $input, 0) !== false) return true;
}
return false;
});