首页 > 解决方案 > PHP 可以处理 $_POST 与另一个字段形式相同的多维数组作为键吗?

问题描述

所以我有一个 html 表单,其中有一个名为 的选择字段"user_id[]",以及另一个名为 的相同表单中的选择字段"equipment_id[]。要点:

当我 var dump 两个用户的示例条目时,当我提交表单时,我目前得到的是:

["user_id"]=> array(2) { 
        [0]=> string(3) "178" 
        [1]=> string(3) "181" 
} 

["equipment_id"]=> array(5) { 
        [0]=> string(1) "3" // this element was selected with user_id 178
        [1]=> string(1) "4" // this element was selected with user_id 178 
        [2]=> string(1) "3" // this element was selected with user_id 181
        [3]=> string(1) "4" // this element was selected with user_id 181 
        [4]=> string(1) "5" // this element was selected with user_id 181 
}  

我想要达到的情况是 user_id 在其下具有每个选定的设备 ID,而不是在单个数组中,因此我可以将选定的设备与选定的用户关联起来。

我认为这可以通过使用"user_id[]"字段作为字段的键来实现,"equipment_id[]"这样如果提交表单,设备可能与用户相关联。

表单元素是:

<select name="user_id[]">
    <option value="" disabled selected>Choose a User</option>
    <option value="178">178</option>
    <option value="181">181</option>
</select>

<select name="equipment_id[]" multiple tabindex="10">
    <option value="" disabled selected>Choose Equipment</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
</select>

所以问题:

任何指点都感激不尽!:0)

更新

我想我在 Stackexchange 的其他一些研究中偶然发现了这个问题的答案。

我的代码如下

PHP/HTML

<?php
    var_dump($_POST);
?>
<html lang="en">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <button id="repeat">Add New Items</button>   
        <form class="work_entry_form" id="workform" action="#" method="POST">   
        <div class="group">
            <select name="user_id[0]" id="user_id">
                  <option value="" disabled selected>Choose user</option>
                  <option value="1">1</option>
                  <option value="2">2</option>
                  <option value="1">3</option>
                  <option value="2">4</option>
            </select>
            <select name="equipment_id[0][]" id="equipment_id" multiple tabindex="10">
                  <option value="" disabled selected>Choose Equipment</option>
                  <option value="1">1</option>
                  <option value="2">2</option>
                  <option value="3">3</option>
                  <option value="4">4</option>
                  <option value="5">5</option>
            </select>
        </div>
        <div class="extras" id="extras"></div>

        <input type="submit" id="submit">
        </form>    
    </body>
</html>

JavaScript(其中一些要感谢克隆表单字段时来自 post Increment 多维数组的@superUntitled )

 $(document).ready(function() {   
 $('#repeat').click(function(){
    var newgroup = $('.group:last').clone(true);
    newgroup.find(':input').each(function(){
        this.name = this.name.replace(/\[(\d+)\]/,function(str,p1){return '[' + (parseInt(p1,10)+1) + ']'});


    }).end().appendTo('#extras');
});
 });

这会导致 var 转储的(示例)细分如下:

array(2) { 
    ["user_id"]=> array(4) { 
        [0]=> string(1) "1" 
        [1]=> string(1) "2" 
        [2]=> string(1) "1" 
        [3]=> string(1) "2" 
    } 
    ["equipment_id"]=> array(4) { 
        [0]=> array(2) { 
            [0]=> string(1) "1" 
            [1]=> string(1) "2" 
        } 
        [1]=> array(3) { 
            [0]=> string(1) "2" 
            [1]=> string(1) "3" 
            [2]=> string(1) "4" 
        } 
        [2]=> array(2) { 
            [0]=> string(1) "4" 
            [1]=> string(1) "5" 
        } 
        [3]=> array(2) { 
            [0]=> string(1) "2" 
            [1]=> string(1) "4" 
        } 
    } 
}

我希望这对将来的某人有用!

JS Fiddle 如果有人想要的话:JSFiddle

标签: phphtmlarrays

解决方案


您可以使用以下模式命名您的选择:

<select name="users[0][id]">

<select name="users[0][equipment_id]" multiple tabindex="10">

每次使用 JS 添加一组新的选择时,增加数字 id。

(喜欢<select name="users[1][id]">

然后你会有一个$_POST这样的数组:

['users' => [
    ['id' => 178, 'equipment_id' => [3, 4],
    ['id' => 181, 'equipment_id' => [3, 4, 5],
]

推荐阅读