Разобрать многомерный ассоциативный массив в PHP - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь перебрать многомерный массив, который выглядит следующим образом:

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 =>
    ...

Я хочу, чтобы массив был разделен таким образом, я могу вставить его в базу данных SQL, используя следующий запрос PDO:

$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"; 
        } 
    } 
} 

1 Ответ

2 голосов
/ 03 августа 2020

Ваш массив намного проще, чем вы думаете. Один foreach предоставит вам доступ к каждой записи.

Подготовьте свой запрос один раз, за ​​пределами l oop, таким образом он будет скомпилирован / оптимизирован только один раз, затем вы просто используете привязку параметров и выполнение внутри l oop, следите за синтаксисом, кавычки вокруг имен параметров нарушат подготовку.

$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]
                ] );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...