PHP能否处理$\u发布的多维数组,该数组包含与键形式相同的另一个字段?
因此,我有一个html表单,其中一个选择字段名为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) {
“user\u id[]”
,另一个选择字段名为“device\u id[]
。要点:
- 每次我想添加另一组
和“user\u id[]”
字段时,我都会使用javascript函数来复制它们“equipment\u id[]
- 在
字段中,我可以一次选择一个用户“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],
]