我們有一個PHP腳本,它可以循環訪問來自不同網站的許多XML/CSV文件。現在我們設法建立一個好的XML/CSV解析器腳本。PHP:循環訪問數組/字符串或其他內容的最快方法
我們編寫的PHP腳本循環了一些BIG XML或CSV文件。在這些XML或CVS文件中包含來自不同產品的條形碼。
眼下前的腳本開始我充滿了這樣的產品ID +條碼從MySQL的數組:
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。
對於在功能搜索:
$ =產品編號SearchBarcodeProduct($ EanNr, '條形碼');
然而功能:
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;
}
填寫數組中,因爲它永遠每次把我們要求MySQL的產品表。
我現在的問題是:
它仍然需要很長的時間,每次通過條形碼的陣列循環。對於其他任何解決方案,有沒有更快的方法,也許是一種數組的另一種方式? 有人可以幫助請我像這個愚蠢的東西幾周工作!
其不好的做法使用'$ GLOBALS'這樣 – 2016-05-16 22:34:02
你有沒有考慮建立你要查找多個條形碼的列表,然後在列表中達到一定規模查詢所有的人都在一次?這將避免每次執行新查詢的開銷,但您仍然可以從MySQL索引中受益。 – Chris
您可能會想要查看在最初加載時對查找數組進行排序,然後如何對其執行對數搜索。 (實際上,只需在查詢中添加ORDER BY barcode即可完成排序部分。) – Uueerdo