PHP能否处理$\u发布的多维数组,该数组包含与键形式相同的另一个字段?

PHP能否处理$\u发布的多维数组,该数组包含与键形式相同的另一个字段?,php,html,arrays,Php,Html,Arrays,因此,我有一个html表单,其中一个选择字段名为“user\u id[]”,另一个选择字段名为“device\u id[]。要点: 每次我想添加另一组“user\u id[]”和“equipment\u id[]字段时,我都会使用javascript函数来复制它们 在“user\u id[]”字段中,我可以一次选择一个用户 在“设备id[]”字段中,我可以从设备列表中选择多个选项 当我提交两个用户的示例条目时,我当前得到的是: ["user_id"]=> array(2) {

因此,我有一个html表单,其中一个选择字段名为
“user\u id[]”
,另一个选择字段名为
“device\u id[]
。要点:

  • 每次我想添加另一组
    “user\u id[]”
    “equipment\u id[]
    字段时,我都会使用javascript函数来复制它们
  • “user\u id[]”
    字段中,我可以一次选择一个用户
  • “设备id[]”
    字段中,我可以从设备列表中选择多个选项
当我提交两个用户的示例条目时,我当前得到的是:

["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 
}  
我想了解的是一种情况,即用户id下有每个选定的设备id,而不是在单个数组中,这样我就可以将选定的设备与用户关联

我认为这可以通过使用
“user\u id[]”
字段作为
“device\u 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>
JavaScript(其中一部分要感谢@superUntitled from post)

这导致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如果有人想要它:

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

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

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

需要帮忙吗


选择一个用户
178
181
选择设备
1.
2.
3.
4.
5.
选择设备
1.
2.
3.
4.
5.
当您选择一些项目时,它将通过以下方式传送到服务器:

[
“用户id”=>[“178”],
“设备id”=>[
178 => ["1", "2"],
181 => ["2", "3"]
]
]
因此,通过对构建表单的javascript进行一些调整,这应该可以达到目的


编辑:更好,因为它不需要在呈现设备下拉列表之前选择用户。

您可以选择多个设备,当选择用户时,这些设备将显示/隐藏。否则,您将不得不使用Javascript构建作业,并使用AJAX提交作业。这在PHP中是可能的,但是,我相信发出请求将需要Javascript。您将发送类似于
?user_id[178][]=3和user_id[178][]=4的内容
Hi@不要惊慌;我已经实现了这个,我得到的结果是:`array(1){[“work”]=>array(1){[0]=>array(4){[“user_id”]=>string(3)“181”[0]=>array(1){[“equipment_id”]=>string(1)“3”}[1]=>array(1){[“equipment_id”]=>string(1)“4”}[2]=>array(1){[“设备id”]=>string(1)“3”}}}}}}`它包含来自另一个用户的设备项选择:0)Hm,似乎在正确的轨道上,但并不完全正确。你能给我发一个链接到一个摆弄表格代码的人吗?也许我能看出问题的症结所在——不要惊慌;感谢您迄今为止的反馈!我已经将代码放在[]的JSFIDLE中,但我在[]上执行了它
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" 
        } 
    } 
}

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

<select name="users[0][equipment_id]" multiple tabindex="10">
['users' => [
    ['id' => 178, 'equipment_id' => [3, 4],
    ['id' => 181, 'equipment_id' => [3, 4, 5],
]