У меня есть PHP-код, который получает несколько массивов:
<?php $checkKey = $_POST['key']; if ($key === $checkKey) { $a = array_values($_POST['a']); $b = array_values($_POST['b']); $c = array_values($_POST['c']); $d = array_values($_POST['d']); if ( (count($a) !== count($b)) || (count($a) !== count($c)) || (count($a) !== count($d)) ) { die ('Not enough parameters!'); } else { } } ?>
Я хочу перебрать все массивы и построить запрос SQL INSERT следующим образом:
INSERT INTO xyz (a,b,c,d) VALUES (1,2,3,4), (4, 5, 6, 7);
Если значения хранятся в каждом массиве (т.е. в этом примере a содержит значения 1 и 4, b значения 2 и 5 и т. Д.),
Как я могу это достичь?
Просто используйте цикл for()
для итерации по индексам от 0
до count($a)
(вы можете использовать любой из массивов, они проверены на одинаковый размер).
$sql = 'insert into xyz (a, b, c, d) values '; for ($i = 0, $l = count($a); $i < $l; ++$i) { $sql .= "('". // it's really important to escape the input! mysqli_real_escape_string($link, $a[$i]).','. mysqli_real_escape_string($link, $b[$i]).','. mysqli_real_escape_string($link, $c[$i]).','. mysqli_real_escape_string($link, $d[$i]). "'), "; } $sql = substr($sql, 0, -2); // trim down the last ', '
использовать это:
function transpose($array) { array_unshift($array, null); return call_user_func_array('array_map', $array); } //example $a=array(1,3); $b=array(2,4); $c=array(5,4); $d=array(10,12); $r= transpose(array($a,$b,$c,$d)); $sql='INSERT INTO xyz (a,b,c,d) VALUES '; foreach($r as $values){ $sql.='('.implode(',',$values).'),'; } $sql=rtrim($sql,','); echo $sql;
Я думаю, что нет встроенной функции php, поэтому вы можете просто сделать это:
<?PHP $count = count($a); $sqlout = 'INSERT INTO xyz (a,b,c,d) VALUES '; for($i=0; $i<$count; $i++) { $sqlout .= ( $i>0 ? ',' : '') . '('. $a[$i] .', '. $b[$i] .', '. $c[$i] .', '. $d[$i] .') '; } ?>
и убедитесь, что вы избегаете ввода, чтобы избежать инъекции SQL!
Простой цикл вокруг
<?php $checkKey = $_POST['key']; if ($key === $checkKey) { $a = array_values($_POST['a']); $b = array_values($_POST['b']); $c = array_values($_POST['c']); $d = array_values($_POST['d']); if ( (count($a) !== count($b)) || (count($a) !== count($c)) || (count($a) !== count($d)) ) { die ('Not enough parameters!'); } else { $sql_array = array(); foreach($a AS $key=>$values) { $sql_array[] = "(".(int)$a[$key].",".(int)$b[$key].",".(int)$c[$key].",".(int)$d[$key].")"; } if (count($sql_array) > 0) { $sql = "INSERT INTO xyz (a,b,c,d) VALUES ".implode(",", $sql_array); // Execute it here } } } ?>
.<?php $checkKey = $_POST['key']; if ($key === $checkKey) { $a = array_values($_POST['a']); $b = array_values($_POST['b']); $c = array_values($_POST['c']); $d = array_values($_POST['d']); if ( (count($a) !== count($b)) || (count($a) !== count($c)) || (count($a) !== count($d)) ) { die ('Not enough parameters!'); } else { $sql_array = array(); foreach($a AS $key=>$values) { $sql_array[] = "(".(int)$a[$key].",".(int)$b[$key].",".(int)$c[$key].",".(int)$d[$key].")"; } if (count($sql_array) > 0) { $sql = "INSERT INTO xyz (a,b,c,d) VALUES ".implode(",", $sql_array); // Execute it here } } } ?>