我有一个表单,我使用多维输入<input type="text" name="input1[]" />
。
我正在使用JavaScript以编程方式将新的输入行添加到类似布局的表中。发布数据后,我将验证数据,然后将其插入到我的数据库中。
目前,我必须像这样迭代:
for ($i = 0; $i < count($_POST[array_keys($_POST)[0]]); $i++) {
$query = $mysqli->prepare("INSERT INTO my_table(col1, col2, col3) VALUES(?, ?, ?)");
$a = $_POST["input1"][$i];
$b = $_POST["input2"][$i];
$c = $_POST["input3"][$i];
$query->bind_param("sss", $a, $b, $c);
$query->execute();
}
注意:我已将代码大幅减少到问题所需的全部内容。
尽管如此,我更愿意像这样迭代:
for ($i = 0; $i < count($_POST); $i++) {
$query = $mysqli->prepare("INSERT INTO my_table(col1, col2, col3) VALUES(?, ?, ?)");
$a = $_POST[$i]["input1"];
$b = $_POST[$i]["input2"];
$c = $_POST[$i]["input3"];
$query->bind_param("sss", $a, $b, $c);
$query->execute();
}
我意识到两者非常相似,但如果可能的话,我更喜欢后一种方法,因为它看起来更清晰可读。
答案 0 :(得分:1)
以下代码可以解决这个问题:
function neatify_post(&$post)
{
$tmp = array();
for ($i = 0; $i < count($post[array_keys($post)[0]]); $i++) {
for ($j = 0; $j < count($post); $j++) {
$tmp[$i][array_keys($post)[$j]] = $post[array_keys($post)[$j]][$i];
}
}
return $post = $tmp;
}
neatify_post($_POST);
没有必要将$ _POST设置为函数的返回值,因为它是passed by reference。