【问题标题】:php implode two dimensional array and generate a stringphp内爆二维数组并生成一个字符串
【发布时间】:2015-04-04 15:37:35
【问题描述】:

要在 mysql 中一次插入多条记录,我想先将二维数组转换为字符串,然后在 php 中触发 mysql 查询以插入所有这些记录,

我有如下二维数组,

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 来做到这一点。但我想用内爆功能来做到这一点。任何的想法 ?

【问题讨论】:

  • 只有内爆函数?您至少需要循环遍历所有数组的东西
  • 序列化数组或JSON编码不是更容易吗?
  • @Rizier123,我没有明确提到“仅具有内爆功能”。我们很可能还会使用其他函数。
  • @SohanPatel 那么您已经知道解决方案了。您需要以某种方式循环遍历所有数组并将它们内爆

标签: php sql loops foreach implode


【解决方案1】:

以下代码可用于解决您的问题,将二维数组内爆为字符串

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

【讨论】:

    【解决方案2】:

    你不能只通过implode() 调用来做到这一点。您必须循环遍历数组。但这样的事情应该适合你:

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

    【讨论】:

      【解决方案3】:

      我建议使用 prepared statement 而不是使用 implode 构造插入查询。

      $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();
      }
      

      【讨论】:

      • @SohanPatel 准备好的语句实际上非常适合将执行多次的查询,因为查询只解析一次
      • @FuzzyTree 唯一的问题是现在使用哪个 API OP,也许他已经使用了 PDO 左右。 (但只有答案是正确的:)
      • @SohanPatel 那么这个问题我们在哪里呢? FuzzyTree 的答案是您想要/需要的吗?
      • @Rizier123 是的,我使用 PDO。但我有一个问题。哪个是最好的使用方法?我应该从循环中生成查询并一次插入所有记录还是按照 FuzzyTree 的建议:使用准备好的语句。哪一个在性能方面更好。抱歉,我是 PDO 的新手。
      猜你喜欢
      • 1970-01-01
      • 2021-06-12
      • 2023-03-08
      • 2022-01-01
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多