通过 PHP/AJAX 提交具有双嵌套输入的多维数组

Submitting a multidimensional array via PHP/AJAX with double nested inputs

提问人:Senne Vandenputte 提问时间:3/3/2023 最后编辑:Andy PrestonSenne Vandenputte 更新时间:3/5/2023 访问量:28

问:

我有一个有点复杂的 HTML 表单,允许用户添加和重新排序带有子行(墙)的行(空格)。

我的输入字段如下所示:

<input type="text" name="spaces[][space]">
<input type="text" name="spaces[][walls][][orientation]">

在工作了整整 2 天后,我设法编写了以下代码,几乎可以正常工作:

$spaces_temp = [];
foreach ($_POST['spaces'] as $k => $v) {
    $val = intdiv($k, 2);
    $spaces_temp[$val][key($v)] = $v[key($v)];
}
$_POST['spaces'] = $spaces_temp;
$spaces = array_map(
    fn($space) => [
        "space" => $space['space'],
        "walls" => array_map(
            fn($wall) => [
                "orientation" => $wall['orientation'],
                "plastering" => $wall['plastering'],
                "color" => $wall['color'],
                "condition" => $wall['condition'],
                "finish" => $wall['finish'],
                "soiled" => $wall['soiled'],
                "comments" => $wall['comments'],
            ],
            $space['walls']
        ),
        "extra_information" => $space['extra_information'],
    ],
    $_POST['spaces'] ?? []
);

我的代码的第一部分我从 SO 上的另一个有用的答案中得到。

我知道 中的数字 2 表示空格数组中将有 2 个字段。只要我不添加任何墙壁,这就可以正常工作。我知道我有 9 个字段,但是当我将这个数字更改为 9 时,似乎并没有添加所有字段:奇怪的是,只有字段空间、墙壁>注释和extra_information被添加到数据库中。将数字更改为 2 到 9 之间的任何值会导致在数据库中添加空白区域和墙。intdiv($k,2)

如何更新此代码,以便它以正确的顺序正确地将所有行和子行添加到数据库中?

PHP ajax 多维数组

评论

0赞 Marcello Perri 3/4/2023
您可以将多维数组作为 JSON 发送并在 PHP 中收到后进行转换吗?

答: 暂无答案