PHP表单返回一个级联数组
快速的背景故事。我有一个简单表单的一部分,允许用户添加/删除一行三个输入。我原本以为我只会使用jQuery来显示/隐藏静态字段,但我摸索了一下,找到了一个似乎非常有效的解决方案 (参考资料:) 就阵列而言,我的工作是: HTML 我只处理过非常简单的表单,所以非常感谢您的帮助 更新:添加克隆字段的jQ JSPHP表单返回一个级联数组,php,html,arrays,forms,dynamic,Php,Html,Arrays,Forms,Dynamic,快速的背景故事。我有一个简单表单的一部分,允许用户添加/删除一行三个输入。我原本以为我只会使用jQuery来显示/隐藏静态字段,但我摸索了一下,找到了一个似乎非常有效的解决方案 (参考资料:) 就阵列而言,我的工作是: HTML 我只处理过非常简单的表单,所以非常感谢您的帮助 更新:添加克隆字段的jQ JS 再次感谢您的帮助。一般来说,array[]语法为数组中的新索引赋值。换句话说,如果您不指定索引,它将为您创建一个索引 代码中的情况是,每次都为数组分配一个新索引。比如说, part[][n
再次感谢您的帮助。一般来说,
array[]
语法为数组中的新索引赋值。换句话说,如果您不指定索引,它将为您创建一个索引
代码中的情况是,每次都为数组分配一个新索引。比如说,
part[][number] => part[0][number]
part[][quantity] => part[1][quantity]
part[][tolerance] => part[2][tolerance]
<input type="text" name="part[0][number]">
<input type="number" name="part[0][quantity]">
<input type="number" name="part[0][tolerance]">
<input type="text" name="part[1][number]">
<input type="number" name="part[1][quantity]">
<input type="number" name="part[1][tolerance]">
问题的快速解决方案是指定索引,而不是创建新索引。比如说,
part[][number] => part[0][number]
part[][quantity] => part[1][quantity]
part[][tolerance] => part[2][tolerance]
<input type="text" name="part[0][number]">
<input type="number" name="part[0][quantity]">
<input type="number" name="part[0][tolerance]">
<input type="text" name="part[1][number]">
<input type="number" name="part[1][quantity]">
<input type="number" name="part[1][tolerance]">
根据您尝试执行的操作,提交JSON数据可能比提交多维表单数据更容易。特别是如果这是通过javascript生成的 一般来说,
array[]
语法为数组中的新索引赋值。换句话说,如果您不指定索引,它将为您创建一个索引
代码中的情况是,每次都为数组分配一个新索引。比如说,
part[][number] => part[0][number]
part[][quantity] => part[1][quantity]
part[][tolerance] => part[2][tolerance]
<input type="text" name="part[0][number]">
<input type="number" name="part[0][quantity]">
<input type="number" name="part[0][tolerance]">
<input type="text" name="part[1][number]">
<input type="number" name="part[1][quantity]">
<input type="number" name="part[1][tolerance]">
问题的快速解决方案是指定索引,而不是创建新索引。比如说,
part[][number] => part[0][number]
part[][quantity] => part[1][quantity]
part[][tolerance] => part[2][tolerance]
<input type="text" name="part[0][number]">
<input type="number" name="part[0][quantity]">
<input type="number" name="part[0][tolerance]">
<input type="text" name="part[1][number]">
<input type="number" name="part[1][quantity]">
<input type="number" name="part[1][tolerance]">
根据您尝试执行的操作,提交JSON数据可能比提交多维表单数据更容易。特别是如果这是通过javascript生成的 这里的问题是您没有指定多维数组中的第一个索引,因此PHP无法将这些项绑定在一起 你得到的是这样的东西:
Array(
0 => Array(
'number' => ...
),
1 => Array(
'quantity' = > ...
),
2 => Array(
'tolerance' = > ...
),
3 => Array(
'number' => ...
),
4 => Array(
'quantity' = > ...
),
5 => Array(
'tolerance' = > ...
),
...
)
您可以看到,每次设置内部数组值时,外部数组中都会有一个新元素
您需要将标记更改为以下内容:
<input type="text" name="part[0][number]">
<input type="number" name="part[0][quantity]">
<input type="number" name="part[0][tolerance]">
<input type="text" name="part[1][number]">
<input type="number" name="part[1][quantity]">
<input type="number" name="part[1][tolerance]">
这将确保将内部数组项分组到正确的外部数组位置。这里的问题是您没有指定多维数组中的第一个索引,因此PHP无法将这些项绑定在一起 你得到的是这样的东西:
Array(
0 => Array(
'number' => ...
),
1 => Array(
'quantity' = > ...
),
2 => Array(
'tolerance' = > ...
),
3 => Array(
'number' => ...
),
4 => Array(
'quantity' = > ...
),
5 => Array(
'tolerance' = > ...
),
...
)
您可以看到,每次设置内部数组值时,外部数组中都会有一个新元素
您需要将标记更改为以下内容:
<input type="text" name="part[0][number]">
<input type="number" name="part[0][quantity]">
<input type="number" name="part[0][tolerance]">
<input type="text" name="part[1][number]">
<input type="number" name="part[1][quantity]">
<input type="number" name="part[1][tolerance]">
这将确保将内部阵列项目分组到正确的外部阵列位置。感谢帮助我识别问题的人员 下面是我如何解决我的特殊问题的。这可能不是最漂亮的解决方案,但我不想让我用来复制这个数组的JS复杂化 首先,我更改了HTML:
<input type="text" name="part_number[]" class="part-number-input">
<input type="number" name="quantity[]">
<input type="number" name="tolerance[]">
然后问题是让它从另一端出来。
根据这个问题的解决方案,我修改了我的PHP:
$part_number = $_POST['part_number'];
$quantity = $_POST['quantity'];
$tolerance = $_POST['tolerance'];
if(isset($_POST['part_number']))
{
$message .='<table>';
$message .='<tr><td><b>Part #</b></td><td><b>Quantity</b></td><td><b>Tolerance</b></td></tr>';
foreach ( $part_number as $key => $part)
{
$message .='<tr>';
$message .='<td> '.$part.' </td>';
$message .='<td> '.$quantity[$key].' </td>';
$message .='<td> '.$tolerance[$key].' </td>';
$message .='</tr>';
}
$message .='</table>';
}
$part\u number=$\u POST['part\u number'];
$quantity=$_POST['quantity'];
$tolerance=$_POST['tolerance'];
如果(isset($_POST[‘零件号’]))
{
$message.='';
$message.='Part#QuantityTolerance';
foreach($key=>$part的零件号)
{
$message.='';
$message.=''.$part.'';
$message.=''.$quantity[$key].';
$message.=''.$tolerance[$key].';
$message.='';
}
$message.='';
}
这正是我想要的。我相信如果花时间做这样的事情,我可以保持我的PHP的原样。我只是不想破坏我已经拥有的功能良好的JS的简单性
再次感谢 感谢那些帮助我发现问题的人 下面是我如何解决我的特殊问题的。这可能不是最漂亮的解决方案,但我不想让我用来复制这个数组的JS复杂化 首先,我更改了HTML:
<input type="text" name="part_number[]" class="part-number-input">
<input type="number" name="quantity[]">
<input type="number" name="tolerance[]">
然后问题是让它从另一端出来。
根据这个问题的解决方案,我修改了我的PHP:
$part_number = $_POST['part_number'];
$quantity = $_POST['quantity'];
$tolerance = $_POST['tolerance'];
if(isset($_POST['part_number']))
{
$message .='<table>';
$message .='<tr><td><b>Part #</b></td><td><b>Quantity</b></td><td><b>Tolerance</b></td></tr>';
foreach ( $part_number as $key => $part)
{
$message .='<tr>';
$message .='<td> '.$part.' </td>';
$message .='<td> '.$quantity[$key].' </td>';
$message .='<td> '.$tolerance[$key].' </td>';
$message .='</tr>';
}
$message .='</table>';
}
$part\u number=$\u POST['part\u number'];
$quantity=$_POST['quantity'];
$tolerance=$_POST['tolerance'];
如果(isset($_POST[‘零件号’]))
{
$message.='';
$message.='Part#QuantityTolerance';
foreach($key=>$part的零件号)
{
$message.='';
$message.=''.$part.'';
$message.=''.$quantity[$key].';
$message.=''.$tolerance[$key].';
$message.='';
}
$message.='';
}
这正是我想要的。我相信如果花时间做这样的事情,我可以保持我的PHP的原样。我只是不想破坏我已经拥有的功能良好的JS的简单性
再次感谢 你到底有什么问题?标记?输出,我要全部放在一行上。你到底有什么问题?标记?输出,我想全部放在一行上。我明白了。我将更新我的问题,但我试图做的是允许访问者添加/删除一行三个输入。然后我想以电子邮件的形式传递这些信息。我明白了。我会更新我的问题,但我想做的是允许