jQuery UI自动完成的简单PHP脚本(不含MySQL)


Simple PHP script (without MySQL) for jQuery UI Autocomplete

我有以下带有jQuery的HTML:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Test</title>
    <script type="text/javascript" src="../scripts/jquery-2.1.4.min.js"></script>
    <link href="../scripts/ui/jquery-ui.min.css" rel="stylesheet" type="text/css">
    <script type="text/javascript" src="../scripts/ui/jquery-ui.min.js"></script>
    <script type="text/javascript">
        $(function() {
            $("#acInput").autocomplete({
                source: "autocomplete.php"
            })
       })
    </script>
</head>
<body>
    <div class="ui-widget">
        <label for="acInput">Flower Name: </label><input type="text" name="acInput" id="acInput">
    </div>
</body>
</html>

我想创建一个PHP文件(autocomplete.PHP,它将在同一目录中),它将搜索数组并返回响应:

我尝试了以下方法:

<?php
$flowers = ["Aster", "Daffodil", "Rose","Peony", "Primula", "Snowdrop", "Poppy", "Primrose", "Petuna", "Pansy"];
$matches = [];
if (isset($_GET["term"])) {  
    $term = trim($_GET["term"]);  // do I need to remove/strip tags or escape it and what is the best way?
    if (!empty($term)) {
        $pattern = '/^'+$term+'/';
        foreach ($flowers as $cvet) {
            preg_match($pattern, $cvet, $matches);
        }
        echo json_encode($matches);
    }
}

但它不起作用。我认为问题与$patternpreg_match有关,因为这是我第一次在PHP中使用正则表达式?

编辑:我要检查的是:

1.数组$flowers中是否存在等于$term或以$term开头的值;

2.包含$term的$flowers数组中是否有值。

将所有这些$flowers数组值(元素)返回给jQuery自动完成,并将其显示为建议。谢谢

我宁愿给您一个非常简化的版本,而不使用regex:

<?php
  $flowers = ["Aster", "Daffodil", "Rose","Peony", "Primula", "Snowdrop", "Poppy", "Primrose", "Petuna", "Pansy"];
  // If the `term` is set.
  if (isset($_GET["term"])) {
    $flowers = array_filter($flowers, "filter_out");
  }
  // Callback function for the array to filter only those values contain the term.
  function filter_out ($var) {
    return strpos($var, $_GET["term"]) !== false;
  }
  // encode and send it back.
  echo json_encode($flowers);

输出

请求:autocomplete.php
响应

["Aster","Daffodil","Rose","Peony","Primula","Snowdrop","Poppy","Primrose","Petuna","Pansy"]

请求:autocomplete.php?term=p
响应:

["Snowdrop","Poppy"]
<?php
$flowers = ["aster", "daffodil", "rose","peony", "primula", "snowdrop", "poppy", "primrose", "petuna", "pansy"];
$matches = [];
if (isset($_GET["term"]) && !empty($_GET["term"])) {  
    $term = trim( strip_tags($_GET["term"]) );  
    if (!empty($term)) {
        $pattern = '/^'. strtolower($term) .'/ui';
        foreach ($flowers as $cvet) {
            preg_match($pattern, $cvet, $m);
            if(isset($m[0])) $matches[] = $m[0]; // or ucfirst($m[0]) (if you want)
        }
        echo json_encode($matches);
    }
}