2010-11-30 91 views
0

我正在尝试向站点添加一些快速和简单的搜索功能。该网站有一个包含所有商店的XML文件,并且我想创建一个搜索框以按镇或邮编搜索最接近该用户的商店。PHP数组搜索

我已经把所有的数据放到一个数组中,但据我所知,没有办法'搜索'一个数组(不是array_search)来检索像使用MySQL LIKE查询的结果。

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

回答

2

您可以尝试* array_filter()*与用户定义的回调。

1

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

2

我认为这里最好的选择是将XML加载到DOM对象(DOMDocument或SimpleXML)中,然后使用它的XPath impelemntation。它不是SQL,但比编写自己的算法消耗数组要少很多。特别是如果您正在讨论如何使用SQL平台执行实际距离计算。

+0

当使用XPath小心的命名空间,你通常无法设置默认的命名空间,以便在XPath的标签已经与XML的默认命名空间前缀(它有一些在该XML中定义)。 – 2010-11-30 15:20:29

3

三个选项:

  • 作为源是XML,你可以使用的QueryPath或phpQuery过滤初始数据集。
  • 如果MySQL不是一个选项,如果你真的想使用LIKE,你仍然可以使用SQLite内存数据库。
  • 或者经过时间考验,最简单:只需手动循环播放阵列并进行手动比较。
0

你可以尝试这样的事:

XPath的
$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 
    } 
}