2010-11-30 26 views
0

私はいくつかの迅速かつ簡単な検索機能をサイトに追加しようとしています。サイトにはすべての店舗を含むXMLファイルがあり、町や郵便番号でユーザーに最も近い店舗を検索する検索ボックスを作成したいと考えています。PHP配列の検索

すべてのデータを配列に入れましたが、わかる限り、配列を検索する方法はありません(array_searchではなく)、MySQL LIKEクエリのような結果を取得する方法はありません。

確かに方法が必要ですか?この場合、MySQLを使用するオプションはありません。

答えて

2

* array_filter()*をユーザー定義のコールバックで試すことができます。

1

あなたはLINQのようなものをPHPの環境で探していると思います。残念ながら、私はこのような解決策を知らない。私が見ることができる最善の解決策は、foreachと独自の検索パラメータを使用したカスタム検索です。または、情報をSQLに格納し、エミュレートしようとしないでください。

2

DOMオブジェクト(DOMDocumentまたはSimpleXML)に実際にXMLをロードしてから、そのXPathインプレメンテーションを使用することをお勧めします。 SQLではなく、配列を消費する独自のアルゴリズムを記述するよりもはるかに少ない作業です。特に、SQLプラットフォームのように実際の距離計算を実行することについて話している場合は特にそうです。

+0

を(それはいくつかのXMLで定義されています)。 –

3

の3つのオプション:

  • あなたのソースがXMLであるので、あなたは初期データセットをフィルタリングするQueryPathまたはphpQueryを使用することができます。
  • MySQLがオプションでない場合でも、実際にLIKEを使用する場合は、SQLiteのメモリ内データベースを使用できます。
  • 時間をかけてテストし、最も簡単です。手動で配列をループして手動で比較するだけです。
0

あなたはこのような何かを試みることができる:XPathは、名前空間に注意して使用する場合のXPathのタグは、XMLのデフォルトの名前空間接頭辞する必要があるので、あなたが通常の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 
    } 
}