2015-04-04 85 views
-1

要在MySQL的一次插入多條記錄,我想先轉換成二維數組PHP中的字符串,然後火MySQL查詢插入所有這些記錄,PHP爆二維數組,並生成一個字符串

我有二維數組如下,

Array 
(
    [0] => Array 
     (
      [0] => Ryan 
      [1] => 1 
      [2] => 0 
     ) 
    [1] => Array 
     (
      [0] => Simon 
      [1] => 2 
      [2] => 1 
     ) 
    . 
    . 
    . 
) 

而且我要讓這樣的字符串,

('Ryan', '1', '0'), ('Simon', '2', '1'), ..... 

我知道,如果它是一維的,我們可以不喜歡它,"'" . implode("','", $row) . "'"

當然我們可以用foreach在foreach循環中完成。但我想用implode函數來做。任何想法 ?

+1

只有implode函數?您至少需要循環所有數組的東西 – Rizier123 2015-04-04 15:39:15

+0

序列化數組或JSON編碼會不會更容易? – adeneo 2015-04-04 15:52:24

+0

@ Rizier123,我沒有明確提到「只能用implode函數」。我們很可能也使用其他功能。 – 2015-04-04 17:03:01

回答

2

下面的代碼可用於您的問題發生內爆爲一個字符串

echo implode(', ', array_map(function ($entry) { 
return "(".implode(',',$entry).")"; 
}, $inputArray)); 
1

在二維數組我建議使用prepared statement,而不是建設有破滅插入查詢。

$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); 
$stmt = $mysqli->prepare("INSERT INTO myTable VALUES (?, ?, ?)"); 
$stmt->bind_param('sii', $row[0], $row[1], $row[2]); 

foreach($rows as $row) { 
    $stmt->execute(); 
} 
+0

但是通過這種方式,查詢將被執行很多次。 – 2015-04-04 16:54:47

+0

@SohanPatel準備好的語句實際上非常適合於多次執行的查詢,因爲查詢只是被解析了一次 – FuzzyTree 2015-04-04 17:05:49

+1

@FuzzyTree現在唯一的問題是API OP會使用什麼,也許他已經使用了PDO等等。 (但是,只有答案是正確的:) – Rizier123 2015-04-04 17:07:36

1

那麼你不能只與implode()調用這樣做。你必須循環訪問數組。但是像這樣的東西應該適合你:

<?php 

    echo $str = "(" . implode("), (", array_map(function($v){ 
     return "'" . implode("','", $v) . "'"; 
    }, $row)) . ")"; 

?>