PHP表单返回一个级联数组

PHP表单返回一个级联数组,php,html,arrays,forms,dynamic,Php,Html,Arrays,Forms,Dynamic,快速的背景故事。我有一个简单表单的一部分,允许用户添加/删除一行三个输入。我原本以为我只会使用jQuery来显示/隐藏静态字段,但我摸索了一下,找到了一个似乎非常有效的解决方案 (参考资料:) 就阵列而言,我的工作是: HTML 我只处理过非常简单的表单,所以非常感谢您的帮助 更新:添加克隆字段的jQ JS 再次感谢您的帮助。一般来说,array[]语法为数组中的新索引赋值。换句话说,如果您不指定索引,它将为您创建一个索引 代码中的情况是,每次都为数组分配一个新索引。比如说, part[][n

快速的背景故事。我有一个简单表单的一部分,允许用户添加/删除一行三个输入。我原本以为我只会使用jQuery来显示/隐藏静态字段,但我摸索了一下,找到了一个似乎非常有效的解决方案

(参考资料:)

就阵列而言,我的工作是:

HTML

我只处理过非常简单的表单,所以非常感谢您的帮助

更新:添加克隆字段的jQ

JS


再次感谢您的帮助。

一般来说,
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的简单性


再次感谢

你到底有什么问题?标记?输出,我要全部放在一行上。你到底有什么问题?标记?输出,我想全部放在一行上。我明白了。我将更新我的问题,但我试图做的是允许访问者添加/删除一行三个输入。然后我想以电子邮件的形式传递这些信息。我明白了。我会更新我的问题,但我想做的是允许