2010-11-30 11 views
0

Ich versuche, einer Website einige schnelle und einfache Suchfunktionen hinzuzufügen. Die Website enthält eine XML-Datei mit allen ihren Geschäften und ich möchte ein Suchfeld erstellen, um nach Ort oder PLZ nach dem nächstgelegenen Geschäft für den Benutzer zu suchen.PHP-Array-Suche

Ich habe alle Daten in ein Array, aber soweit ich sagen kann, gibt es keine Möglichkeit, ein Array (NICHT array_search) zu suchen, um Ergebnisse wie eine MySQL LIKE Abfrage abzurufen.

Sicher muss es einen Weg geben? Die Verwendung von MySQL ist in diesem Fall keine Option.

Antwort

2

Sie können * array_filter() * mit einem benutzerdefinierten Rückruf versuchen.

1

Ich denke, Sie suchen etwas wie LINQ, aber in einer PHP-Umgebung. Leider kenne ich keine Lösung wie diese. Die beste Lösung, die ich sehen kann, ist eine benutzerdefinierte Suche mit einer foreach und eigenen Suchparametern. Oder speichern Sie die Informationen einfach in SQL und versuchen Sie nicht, sie zu emulieren.

2

Ich denke, Ihre beste Wette hier ist, die XML tatsächlich in ein DOM-Objekt (DOMDocument oder SimpleXML) zu laden und dann seine XPath-Implementation zu verwenden. Es ist nicht SQL, aber es ist viel weniger Arbeit als das Schreiben eines eigenen Algorithmus, der das Array verbraucht. Vor allem, wenn Sie über reale Distanzberechnungen wie mit einer SQL-Plattform sprechen.

+0

Wenn XPath zu Namens vorsichtig verwenden, können Sie in der Regel nicht gesetzt Standard-Namespace für XPath so Tags in XPath haben mit Standard-Namespace von XML-Präfix werden (Es gibt einige definiert in diesem XML). –

3

drei Optionen:

  • als Quelle XML ist, Sie QueryPath oder phpQuery zu filtern, um den Anfangsdatensatz verwenden könnten.
  • Wenn MySQL keine Option ist, können Sie immer noch eine SQLite In-Memory-Datenbank verwenden, wenn Sie wirklich LIKE verwenden möchten.
  • Oder Zeit getestet und am einfachsten: einfach manuell über Ihr Array und führen Sie manuelle Vergleiche.
0

Sie könnten so etwas wie dies versuchen:

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