【问题标题】:Parse multidimensional associative array in PHP在 PHP 中解析多维关联数组
【发布时间】:2020-11-23 15:36:32
【问题描述】:

我正在尝试遍历一个看起来像这样的多维数组:

array (size=342)
  0 => 
    array (size=11)
      0 => string 'data' (length=4)
      1 => string 'data1' (length=30)
      2 => string 'data2' (length=12)
      3 => string 'data3' (length=30)
      4 => string 'data4' (length=12)
      5 => string 'data5' (length=47)
      6 => string 'data6' (length=21)
      7 => string 'data7' (length=14)
      8 => string 'data8' (length=3)
      9 => string 'data9' (length=21)
      10 => string 'data10' (length=9)
  1 => 
    array (size=11)
      0 => string 'data' (length=4)
      1 => string 'data1' (length=30)
      2 => string 'data2' (length=12)
      3 => string 'data3' (length=30)
      4 => string 'data4' (length=12)
      5 => string 'data5' (length=47)
      6 => string 'data6' (length=21)
      7 => string 'data7' (length=14)
      8 => string 'data8' (length=3)
      9 => string 'data9' (length=21)
      10 => string 'data10' (length=9)
  2 =>
    ...

我希望像这样拆分数组,我可以使用以下 PDO 查询将其插入 SQL 数据库:

$req = $pdo->prepare("INSERT INTO table
                (data, data1, data2, data3, data4, data5, data6, data7, 
                data8, data9, data10) 
        VALUES (':data', ':data1', ':data2', ':data3', ':data4', ':data5', 
                ':data6', ':data7', ':data8', ':data9', ':data10')");

$req->execute(array(
    ':data0' => $array[0][0],
    ':data1' => $array[0][1],
    ':data2' => $array[0][2],
    ':data3' => $array[0][3],
    ':data4' => $array[0][4],
    ':data5' => $array[0][5],
    ':data6' => $array[0][6],
    ':data7' => $array[0][7],
    ':data8' => $array[0][8],
    ':data9' => $array[0][9],
    ':data10' => $array[0][10]
));
                 

我尝试使用以下 for/foreach 循环,但它没有按预期工作:

foreach ($array as $key => $value) {

    foreach ($value as $sub_key => $sub_val) { 
                 
        if (is_array($sub_val)) { 
            echo $sub_key . " : \n"; 
            foreach ($sub_val as $k => $v) { 
                echo "\t" .$k . " = " . $v . "\n"; 
            } 
        } else { 
            echo $sub_key . " = " . $sub_val . "\n"; 
        } 
    } 
} 

我怎样才能做到这一点?

【问题讨论】:

  • 您是否尝试过将外部foreach ($array as $value) { 与$req->execute(array( ':data0' => $value[0], ... 一起使用
  • 向我们展示代码实际生成的内容以及您实际想要生成的内容
  • @NigelRen 我正在尝试你所说的
  • @RiggsFolly 当然,我会编辑代码
  • @NigelRen 你能写下完整的 foreach 套件吗?我无法让它工作......

标签: php arrays pdo


【解决方案1】:

您的数组比您想象的要简单得多。一个 foreach 将允许您访问每条记录。

在循环外准备一次查询,这样它只会编译/优化一次,然后您只需使用参数绑定并在循环内执行,注意语法,参数名称周围的引号会破坏准备。

$stmt = $pdo->prepare("INSERT INTO table
                (data, data1, data2, data3, data4, data5, data6, data7, 
                data8, data9, data10, data11, data12, data13, data14, 
                data15, data16, data17, data18, data19, data20) 
        VALUES (:data, :data1, :data2, :data3, :data4, :data5, 
                :data6, :data7, :data8, :data9, :data10, :data11, 
                :data12', :data13, :data14, :data15, :data16, 
                :data17, :data18, :data19, :data20)");


foreach ($array as $record) {  
    $stmt->execute([':data' => $record[0],
                    ':data1' => $record[1],
                    ':data2' => $record[2],
                    ':data3' => $record[3],
                    ':data4' => $record[4],
                    ':data5' => $record[5],
                    ':data6' => $record[6],
                    ':data7' => $record[7],
                    ':data8' => $record[8],
                    ':data9' => $record[9],
                    ':data10' => $record[10],
                    ':data11' => $record[11],
                    ':data12' => $record[12],
                    ':data13' => $record[13],
                    ':data14' => $record[14],
                    ':data15' => $record[15],
                    ':data16' => $record[16],
                    ':data17' => $record[17],
                    ':data18' => $record[18],
                    ':data19' => $record[19],
                    ':data20' => $record[20]
                ] );
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多