2014-05-19 93 views
2

我有一個數組如下:PHP存儲陣列到數據庫的邏輯問題

$data = array('John',22,'Peter',31,'Kevin',30,'Jessy',28.......'Revin',23); 

這個陣列會包含數千個像姓名,年齡相同的格式元素。

現在我需要通過使用PHP/MYSQL函數將此數組插入表中。

-------------------- 
Id  Name Age 
-------------------- 
1  John  22 
2  Peter 31 
3  Kevin 30 

請注意不要給出像循環或爆炸的選項。幫助表示讚賞

+0

爲什麼不能/你不使用循環?這是做這件事唯一明智的方法。 – GordonM

+0

你絕對需要'for'或'foreach'或'while'循環來做到這一點。 如果沒有循環,沒有辦法使用未知方法處理數組。 –

+0

如果我們使用forloop考慮1L記錄,那麼瀏覽器會說「無法處理和強制退出」。有一種方法除了LOOP,只有我試圖.. – AnNaMaLaI

回答

4

我希望波紋管代碼將工作根據您的需要, 編碼快樂:-)

 $data=array('John',22,'Peter',31,'Kevin',30,'Jessy',28);// list of array 
     $array=array_chunk($data, 2);// converting array to multidimensional array 
     $arraytostr = implode(',', array_map(function($el){ return "('".$el['0']."',".$el['1'].")"; }, $array)); // implode the multidimensional array to ','separate array 
     $query="INSERT INTO test (fname,age) VALUES ".$arraytostr;// append the new ',' separate array with query 
3
$query = $pdo_db->prepare(" 
INSERT 
INTO table (
    name, 
    age 
) 
VALUES " . rtrim(str_repeat('(?,?),', count($data)/2), ',') 
); 
$query->execute($data); 
+3

什麼是這個黑魔法... –

+0

如果數組足夠大,服務器是MySQL的最終結果可能是一個服務器已經消失的錯誤。否則這是一個相當狡猾的解決方案。 – GordonM

+1

正如OP所要求的那樣,它沒有使用任何循環,這很簡單,很簡單。輸入數組是一個純哈希轉換爲列表,所以它可以簡單地被計數,然後除以2.其餘的是字符串魔術。至於數組的大小,那麼......假設OP可以拼接數組並重復這個方法,如果有多於MySQL可以在單個查詢中處理的話。 – techouse

0

沒有辦法做到這一點沒有循環,imo。

$data = array('John',22,'Peter',31,'Kevin',30,'Jessy',28); 
$length = count($data); 

for($i=0;$i<$length;$i+=2) { 
    $sql = 'INSERT INTO <TABLE> (`Name`,`Age`) VALUES ("' . ($data[$i]) . ',"' . $data[$i+1] . '");'; 
} 

該陣列可以以更好的方式來表示數據。