Ваш массив намного проще, чем вы думаете. Один 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]
] );
}