在PHP中过滤JQuery自动完成结果

时间:2014-03-30 17:34:03

标签: php jquery arrays json autocomplete

我正在尝试使用我的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中输入的搜索字符串,对吗?

1 个答案:

答案 0 :(得分:0)

编辑:

使用它(我已经测试过了):

$result = array_filter($array, function ($item) use ($input) {
    foreach($item as $field){
        if(stripos($field, $input, 0) !== false) return true;
    }
    return false;
});