さまざまなWebサイトから多数のXML/CSVファイルをループするPHPスクリプトがあります。今、我々は良いXML/CSVパーサスクリプトを構築することができます。PHP:配列/ stringbuilerなどをループする最速の方法
私たちが書いたPHPスクリプトは、いくつかのBIG XMLまたはCSVファイルをループしています。これらのXMLまたはCVSファイルには、異なる製品のバーコードが含まれています。今
スクリプトは、私はこのようなMySQLのからのプロダクトID +バーコードで配列を埋める開始する前に:
function Barcodes_Array() {
$sql = "SELECT ProductId, Barcode FROM Products WHERE (Barcode <> '') ";
$res = mysql_query($sql);
while ($rijen = mysql_fetch_assoc($res)) {
$GLOBALS['arrBarcodes'][] = $rijen;
}
}
たびXML(またはCSV)を介して、我々ループ我々がいるかどうかを確認する必要があるファイルは、バーコードが配列内に存在し、プロダクトIDが返されます。関数内で検索するための
:
$のProductId = SearchBarcodeProduct($ EanNr、 'バーコード');それは永遠に私たちはMySQLの製品表を尋ねる各時間がかかったので、私たちは、アレイに記入
function SearchBarcodeProduct($elem, $field) { $top = sizeof($GLOBALS['arrBarcodes']) - 1; $bottom = 0; $ProductId = 0; while($bottom <= $top) { if($GLOBALS['arrBarcodes'][$bottom][$field] == $elem) { return $GLOBALS['arrBarcodes'][$bottom]['ProductId']; } else { if (is_array($GLOBALS['arrBarcodes'][$bottom][$field])) { if (in_multiarray($elem, ($GLOBALS['arrBarcodes'][$bottom][$field]))) { return $GLOBALS['arrBarcodes'][$bottom]['ProductId']; } } } $bottom++; } return $ProductId; }
:
そして、まだ機能。
私の質問は以下のようになります。
それはまだバーコードの配列をループするたびに非常に長い時間がかかります。他のソリューションの場合は、配列とは異なる方法かもしれませんか? 誰かが私がこの愚かなことで何週間も働いているのを助けることができますか:)事!
このように –
のように '$ GLOBALS'を使うのは悪い習慣です。検索したい複数のバーコードのリストを作成し、それらのすべてを一度に検索する特定のサイズに達すると考えましたか?これは、毎回新しいクエリを実行するオーバーヘッドを避けることができますが、MySQLのインデックスのメリットはあります。 – Chris
最初にロードされたときに検索配列をソートし、次にその上で対数検索を実行する方法を調べることをお勧めします。 (実際には、クエリに 'ORDER BY barcode'を追加するだけでソート部分を行うことができます) – Uueerdo