php - PHP 可以处理 $_POST 与另一个字段形式相同的多维数组作为键吗?
问题描述
所以我有一个 html 表单,其中有一个名为 的选择字段"user_id[]"
,以及另一个名为 的相同表单中的选择字段"equipment_id[]
。要点:
- 每次我想添加另一组
"user_id[]"
和"equipment_id[]
字段时,我都会使用 javascript 函数来复制它们。 - 在
"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>
所以问题:
有没有一种方法可以将该
user_id[]
字段用作该字段的键,equipment_id[]
以便我可以使用 提取为子数组user_id[]
?如果没有,是否有另一种方法可以
equipment_id[]
按用户对字段选择进行分类并提取它们?
任何指点都感激不尽!: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
解决方案
您可以使用以下模式命名您的选择:
<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],
]
推荐阅读
- python - 考虑对抗性输入,将积分插入 Python 的 dict() 的最坏情况时间复杂度
- javascript - 减少此代码重复性的想法?
- ios - 快速计算短时傅里叶变换
- javascript - 如何一次性打开网页表上所有基于链接的文件名并在新选项卡中打开
- javascript - 使用 Atlas Search 和 Django 构建自动完成表单元素
- javascript - 按钮上的 TamperMonkey EventListener 不起作用
- python - 在列中的最大日期结束 pandas Grouper
- javascript - React Hooks 渲染了比上一次渲染更多的钩子
- c# - 拖动物体时抖动
- python - 如何设置和保留x87浮点精度模式