我從一個巨大的XML檔案中加載資料到一個陣列中。現在還不錯,網路服務器的記憶體沒有過載。但是當我試圖遍歷該陣列以處理資料時,我得到了一個記憶體錯誤。顯然,將記憶體限制設定為-1是不可行的。
。因此,我想做的是一步一步地迭代該陣列。比如前1000個條目,然后是下一個,直到沒有更多的條目了。像這樣:
$i = 0;
foreach($entries as $entry) {
//對條目做一些處理。
if ( $i == 1000) break。
}
我現在想遍歷接下來的1.000個條目。我的想法是要解決陣列的鍵。就像再次進行回圈,但是從 entries[1000] 開始。但是我無法從回圈中斷開,并再次回到回圈中去。
我試圖實作的目標是否可行?
非常感謝您!
uj5u.com熱心網友回復:
這個問題可能發生在你的foreach回圈到達之前。你應該看一下決議XML檔案和填充陣列$entries的代碼。如果你使用的是XMLParser,那么你應該看看處理函式(它們通常被稱為startElements和endElements,如果不是,請尋找xml_set_element_handler,函式名稱將在其第二和第三個引數中)。在處理函式中,你可能正在填充陣列$entries。你應該直接在處理程式中進行處理,并檢索相關的資料,而不是把所有東西都放在記憶體中。
PS:如果我的理論被證明是正確的,你應該改變標題并重新表述問題
。uj5u.com熱心網友回復:
如果你的資料真的很大,并且拖慢了你的網路服務器,可以試試這個:
for($i = 1; $i <= count($entries);$i ) {
if($i % 1000 == 0) {
//你的代碼在這里。
}
usleep(100000); //延遲執行0.1秒×1000條。
}
uj5u.com熱心網友回復:
從你的做法來看 我認為你應該這樣做而不是
for ($i=0; $i>=1000; $i ){
}
注意:$i=0是當你想讓它從0開始計數時,但如果你想讓它從1開始計數,那么將0替換為1
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/306677.html
標籤:
