【问题标题】:Group select boxes into array for post?将选择框分组到数组中以进行发布?
【发布时间】:2010-12-27 01:15:43
【问题描述】:

我知道如何通过多选表单对象发送数据并将数据分组到一个数组中:

<select name="my_data[]" multiple="multiple"/>

是否可以有多个具有“单个”值的不同选择框并将它们全部推送到一个数组中?即

<select id="select-1" name="my_data[]"/>
<select id="select-2" name="my_data[]"/>

结果是

[
    0 => {value of select-1},
    1 => {value of select-2}
]

如果不可能,将选择中的数据组合到数组中的好方法是什么?

【问题讨论】:

  • 您已经标记了 PHP 和 JavaScript。你想如何获得这些值?服务器端还是客户端?
  • 马克,希望服务器端不必依赖 javascript。我想通了,但是响应很适合查看服务器端和客户端选项。

标签: php javascript html arrays


【解决方案1】:

虽然您可能可以做到,但我不推荐它。只是因为其他人阅读代码并不清楚。

更好的方法是简单地将它们组合到服务器端。假设:

<select id="select-1" name="data_1[]"/>
...

<select id="select-2" name="data_2[]"/>
...

在 PHP 方面:

$data1 = $_POST['data_1'];
$data2 = $_POST['data_2'];
$combined = array_merge($data1, $data2);

【讨论】:

  • 您可能想将您的 php 更改为:$_POST['data_1']; $_POST['data_2'];
  • 没有破坏。两个具有相同名称的&lt;select&gt;s 与两个具有相同名称的&lt;input&gt;s 没有什么不同:两者都将被提交(例如,在查询字符串中它将是foo=v1&amp;foo=v2。这是 PHP 做的破坏,当您使用末尾没有 [] 的名称时。
【解决方案2】:

假设您在页面上获得了所有&lt;select&gt;

// get all selects
var boxes = document.getElementsByTagName("select"),
    arr = []; // your final values array

// for each select, pull out the value and push it into 'arr'
for(var i = 0, len = boxes.length; i < len, i++) {
  arr.push(boxes[i].value);
}

【讨论】:

    【解决方案3】:

    啊,删除多个似乎可行。当您的表单元素名称中有“[]”时,Zend Framework 的 FormSelect 助手会自动添加它,而我没有意识到这一点。

    【讨论】:

    • 有趣!有趣的意思是烦人和愚蠢。 :-)
    猜你喜欢
    • 2020-08-29
    • 1970-01-01
    • 2010-10-26
    • 2021-04-17
    • 2021-12-14
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    相关资源
    最近更新 更多