[英]How can I store a huge amount of content from multidiemsional array into mysql database?
這是我的數組:
array(4) {
[0]=>
array(500000) {
["1234"]=>
array(3) {
["fileName"]=>
string(10) "monkey.jpg"
["path"]=>
string(20) "animales/monkey.jpg"
["dateTime"]=>
string(19) "2016-10-12 19:46:25"
}
["3456"]=>
array(3) {
["fileName"]=>
string(9) "horse.jpg"
["path"]=>
string(19) "animales/horse.jpg"
["dateTime"]=>
string(19) "2016-10-12 19:46:25"
}
.... and many more...
}
... and many more...
}
我想將內容存儲到我的數據庫中:
$sql = "INSERT INTO files (id,fileName,path,dateTime) values(?,?,?,?) ";
foreach($array as $key => $value){
if(is_array($value)){
foreach($value as $key => $v){
foreach($v as $k => $item){
if(is_array($v)){
$s = str_replace("\\","",$v['dateTime']);
$d = strtotime($s);
$dateTime = date('Y.m.d H:i:s', $d);
$q->execute(array($key,$v['fileName'],$v['path'],$dateTime));
}
}
}
}
}
我的問題是,我有超過500.000條目。 所以我的系統崩潰了。 我認為這是因為循環內有太多循環。 有沒有一種方法可以僅通過一個循環或以其他方式更快地讀取內容?
注意: $array
是這樣創建的拼接數組($ array [] = array_splice($ orinal_array,0,count($ original_array));實際上,這樣做是為了使系統更快
請看一下這個答案:
MYSQL使用LOAD DATA INFILE從csv導入數據
您應該將數據轉換為csv並依靠LOAD DATA INFILE
不是您應該將csv文件上傳到mysql服務器以依賴於此Mysql功能
使用序列化或json_encode可能是一種方法。 這樣,您就不必遍歷所有元素並處理斜線,因為所有元素都變成了一個字符串,以后可以使用json_decode讀取或反序列化PHP函數。
旁注:請使用有意義的變量名,以便幫助您的人們不必弄清楚您的意思。 即:
foreach($v as $k => $item){
比...差一點
foreach($fileCollection as $fileIterator => $fileDetails){
如果您確實需要遍歷所有數據並將每個文件屬性存儲在單獨的列中,則您需要的只是2x foreach(一個用於收集,一個用於每個文件)。
foreach($globalCollection as $fiveHundredThousandRows){
foreach ($fiveHundredThousandRows as $fileIterator => $fileData){
$timestamp = strtotime($fileData['dateTime']);
$q->execute(array($fileIterator,$fileData['fileName'],$fileData['path'],date( 'Y.m.d H:i:s', $timestamp)));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.