PHP数组搜索

PHP数组搜索,php,Php,我正在尝试向网站添加一些快速简单的搜索功能。该网站有一个包含所有商店的XML文件,我想创建一个搜索框,按城镇或邮政编码搜索与用户最近的商店 我已将所有数据放入一个数组中,但据我所知,没有办法像使用类似MySQL的查询那样“搜索”一个数组(而不是array_search)来检索结果 肯定有办法吗?在这种情况下,使用MySQL不是一个选项。您可以尝试使用带有用户定义回调的*array\u filter()*。我认为您正在寻找类似LINQ的东西,但是在PHP环境中。不幸的是,我不知道这样的解决方案。我

我正在尝试向网站添加一些快速简单的搜索功能。该网站有一个包含所有商店的XML文件,我想创建一个搜索框,按城镇或邮政编码搜索与用户最近的商店

我已将所有数据放入一个数组中,但据我所知,没有办法像使用类似MySQL的查询那样“搜索”一个数组(而不是array_search)来检索结果


肯定有办法吗?在这种情况下,使用MySQL不是一个选项。

您可以尝试使用带有用户定义回调的*array\u filter()*。

我认为您正在寻找类似LINQ的东西,但是在PHP环境中。不幸的是,我不知道这样的解决方案。我能看到的最佳解决方案是使用foreach和您自己的搜索参数进行自定义搜索。或者只是将信息存储在SQL中,避免试图模拟它。

我认为最好的办法是将XML实际加载到DOM对象(DOMDocument或SimpleXML)中,然后使用其XPath推进。这不是SQL,但与编写消耗数组的自己的算法相比,工作量要少得多。特别是如果您正在谈论像使用SQL平台一样执行实际距离计算。

三个选项:

  • 由于源是XML,因此可以使用QueryPath或phpQuery来过滤初始数据集
  • 如果MySQL不是一个选项,您仍然可以使用SQLite内存数据库,如果您真的想使用LIKE的话
  • 或者是经过时间测试且最简单的:只需手动循环数组并进行手动比较

    • 您可以尝试以下方法:

      $q = $_GET['search'];
      
      $file = new DOMDocument();
      $file->load("filename.xml");
      
      $xml = simplexml_import_dom($file);
      foreach($xml->store as $store) 
      {
        $store_name = $store->name;
        if($q == $store_name)
        {
          //query in your database
        }
      }
      

      在使用XPath时,请注意名称空间,通常不能为XPath设置默认名称空间,因此XPath中的标记必须以默认名称空间xml作为前缀(如果该xml中定义了某些名称空间)。