【问题标题】:Posting a multidimensional select array with values发布带有值的多维选择数组
【发布时间】:2013-02-06 03:49:12
【问题描述】:

我有一个显示 50 种产品的页面。每个产品最多可以有 4 个类别。

这个页面需要一个保存按钮,所以我想弄清楚如何发送 3 条信息。产品id,所有4个产品categories,以及类别values

提交时我得到:

35:Array
88:Array

这是当前结构:(请记住,其中将有 50 个,因为每个产品可以有 4 个类别)

<select name="[ PRODUCT ID ][ CATEGORY ONE ]">
<option value="[ CATEGORY ID ]"> CATEGORY NAME </option>
</select>
<select name="[ PRODUCT ID ][ CATEGORY TWO ]">
<option value="[ CATEGORY ID ]"> CATEGORY NAME </option>
</select>
<select name="[ PRODUCT ID ][ CATEGORY THREE ]">
<option value="[ CATEGORY ID ]"> CATEGORY NAME </option>
</select>
<select name="[ PRODUCT ID ][ CATEGORY FOUR ]">
<option value="[ CATEGORY ID ]"> CATEGORY NAME </option>
</select>

这是 2 个产品的代码:

<?
if(isset($_POST['productCat'])){
    foreach($_POST['productCat'] as $a=>$b){
        echo $a.':'.$b.'<br>';
    }
}

?>
<form method="post">
<select name="productCat[35][1]">
    <option value="[3]">3</option>
    <option value="[4]">4</option>
    <option value="[5]">5</option>
    <option value="[6]">6</option>
    <option value="[7]">7</option>
    <option value="[8]">8</option>
</select>
<select name="productCat[35][2]">
    <option value="[3]">3</option>
    <option value="[4]">4</option>
    <option value="[5]">5</option>
    <option value="[6]">6</option>
    <option value="[7]">7</option>
    <option value="[8]">8</option>
</select>
<select name="productCat[35][3]">
    <option value="[3]">3</option>
    <option value="[4]">4</option>
    <option value="[5]">5</option>
    <option value="[6]">6</option>
    <option value="[7]">7</option>
    <option value="[8]">8</option>
</select>
<select name="productCat[35][4]">
    <option value="[3]">3</option>
    <option value="[4]">4</option>
    <option value="[5]">5</option>
    <option value="[6]">6</option>
    <option value="[7]">7</option>
    <option value="[8]">8</option>
</select>
<select name="productCat[88][1]">
    <option value="[3]">3</option>
    <option value="[4]">4</option>
    <option value="[5]">5</option>
    <option value="[6]">6</option>
    <option value="[7]">7</option>
    <option value="[8]">8</option>
</select>
<select name="productCat[88][2]">
    <option value="[3]">3</option>
    <option value="[4]">4</option>
    <option value="[5]">5</option>
    <option value="[6]">6</option>
    <option value="[7]">7</option>
    <option value="[8]">8</option>
</select>
<select name="productCat[88][3]">
    <option value="[3]">3</option>
    <option value="[4]">4</option>
    <option value="[5]">5</option>
    <option value="[6]">6</option>
    <option value="[7]">7</option>
    <option value="[8]">8</option>
</select>
<select name="productCat[88][4]">
    <option value="[3]">3</option>
    <option value="[4]">4</option>
    <option value="[5]">5</option>
    <option value="[6]">6</option>
    <option value="[7]">7</option>
    <option value="[8]">8</option>
</select>
<input type="submit" value="Save">
</form>

【问题讨论】:

  • 请写出究竟是什么问题?你陈述你使用的东西,但不完全是你想要的。

标签: php html forms multidimensional-array foreach


【解决方案1】:

因为你有

<select name="productCat[35][1]">
<select name="productCat[35][2]">
...
<select name="productCat[88][1]">
<select name="productCat[88][2]">

的价值

$_POST['productCat']

实际上是一个数组。像这样的数组:

   array( 35 => array( 1 => .., 2 => .., 3 => ..., ... ),
          88 => array( 1 => .., 2 => .., 3 => ..., ... )
        );

因此,您的调试输出非常合理

你可以这样访问数组:

$_POST[ 'productCat' ][ 35 ][ 3 ] 
$_POST[ 'productCat' ][ 88 ][ 5 ] 

一般来说,如果一个变量(表达式)引用了一个数组——甚至是一个数组作为另一个数组的一部分——只需附加 [...] 即可访问该子数组

  • $_POST[ 'productCat' ] 是您的脚本返回的全部内容
  • $_POST[ 'productCat' ][ 35 ] 都是产品 35 的值
  • $_POST[ 'productCat' ][ 35 ][ 5 ] 是产品 35 的类别 5 的选定值

【讨论】:

  • 如何访问数组中的数组?
【解决方案2】:

您应该将 jQuery 与 data- 属性一起使用,以便您可以轻松地将数据收集到要发布到服务器的对象中。

您可能可以存储在 GET 查询变量中的产品 ID:?prodId=43

<select data-category="1">
   <option value="3">3</option>
   <option value="4">4</option>
   <option value="5">5</option>
   <option value="6">6</option>
   <option value="7">7</option>
   <option value="8">8</option>
</select>

还有 jQuery 部分:

var info = [];

$('select').each(function() {
   info.push({
              'category': $(this).data('category'),
              'value': $(this).val()
            });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-11
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    相关资源
    最近更新 更多