在下拉列表中发布多维数组

时间:2017-02-20 05:40:50

标签: php arrays multidimensional-array

我有两个同名的下拉选项,如下所示。

<form action="" method="post">
    <select name="freeoptions[]">
        <option value="[7][4]">Black</option>
        <option value="[7][5]">Blue</option>
        <option value="[7][3]">Red</option>
    </select>


    <select name="freeoptions[]">
        <option value="[9][11]">Small</option>
        <option value="[9][15]">Large</option>
        <option value="[9][13]">XL</option>
    </select>

    <input type="submit" name="submit" value="submit">
</form>

现在,当我发布表单时,将数据发布到数组中,如

Array
(
    [freeoptions] => Array
        (
            [0] => [7][4]
            [1] => [9][11]
        )
)

但是我希望这个数组像

Array
        (
            [freeoptions] => Array
            (
                [0] => Array
                (
                        [id] => [7]
                        [value] => [4]
                )
                [1] => Array
                (
                        [id] => [9]
                        [value] => [11]
                )
            )
        )

任何人都可以帮我解决这个问题。 谢谢,

2 个答案:

答案 0 :(得分:1)

“value”属性中的任何内容都将作为文字字符串发送,无论其内容如何,​​因此您无法将值作为数组开箱即用。

您始终可以在同一个值属性中同时使用这两个值,并将其拆分在后端。

HTML中的示例:

<option value="7;4"></option>

然后在你的后端做这样的事情:

$data = [];

// Loop all freeoptions params
foreach ($_POST['freeoptions'] as $opt) {
    // Split the value on or separator: ;
    $items = explode(';', $opt);

    if (count($items) != 2) {
        // We didn't get two values, let's ignore it and jump to the next iteration
        continue;
    }

    // Create our new structure
    $data[] = [
        'id'    => $items[0], // Before the ;
        'value' => $items[1], // After the ;
    ];
}

$data - 数组现在应该包含您想要的数据结构。

如果您想继续使用$_POST - 变量,只需在foreach之后覆盖原始数据:

$_POST['freeoptions'] = $data;

答案 1 :(得分:0)

您想显示数据库结果还是手动显示?