2015-04-04 60 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)) . ")"; 

?>