如何重新排序POST数组?

时间:2017-09-27 11:20:29

标签: php arrays

我有一个表单,我使用多维输入<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();
}

我意识到两者非常相似,但如果可能的话,我更喜欢后一种方法,因为它看起来更清晰可读。

1 个答案:

答案 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