2010-11-30 5 views
0

Я пытаюсь добавить некоторые быстрые и простые функции поиска на сайт. На сайте есть файл XML со всеми их хранилищами, и я хочу создать окно поиска для поиска ближайшего хранилища для пользователя по городу или почтовому индексу.Поиск массива PHP

Я поместил все данные в массив, но, насколько я могу судить, нет способа «поиска» массива (NOT 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 так теги в XPath должны начинаться с префикса пространства имен XML по умолчанию (это есть некоторые, определенные в этом xml). – 2010-11-30 15:20:29

3

Три варианта:

  • Как ваш источник XML, вы могли бы использовать QueryPath или phpQuery для фильтрации исходного набора данных.
  • Если MySQL не является вариантом, вы все равно можете использовать базу данных SQLite в памяти, если вы действительно хотите использовать LIKE.
  • Или проверено временем и самым простым: просто вручную переверните свой массив и выполните ручные сравнения.
0

Вы могли бы попробовать что-то вроде этого:

$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 
    } 
} 
Смежные вопросы