我有一个像下面这样的表单,发布到contacts.php,用户可以用jquery动态添加更多表单。

使用下面的代码

<input type="text" name="name[]" />
<input type="text" name="email[]" />

<input type="text" name="name[]" />
<input type="text" name="email[]" />

<input type="text" name="name[]" />
<input type="text" name="email[]" />


我将得到类似这样的信息:


name1name2name3email1email2email3


如何将这些数组放入类似下面的代码的地方

$name = $_POST['name'];
$email = $_POST['account'];

foreach( $name as $v ) {
print $v;
}

foreach( $email as $v ) {
print $v;
}


,所以我的输出是这样的:


名称为name1,电子邮件为email1,谢谢
名称为name2,电子邮件为email2,谢谢
名称为name3,电子邮件为email3,谢谢


感谢您的帮助或建议

#1 楼

它们已经存在于数组中:$name是一个数组,$email也是如此。 />
要处理更多输入,只需扩展模式:

$name = $_POST['name'];
$email = $_POST['account'];

foreach( $name as $key => $n ) {
  print "The name is ".$n." and email is ".$email[$key].", thank you\n";
}


评论


谢谢,如果我添加了另一个输入,例如location [],该如何添加呢?

– thom
2010年7月23日在1:06

基本上,您只是扩展了模式。参见上面的编辑...从$ _POST分配它们时,任何其他输入也将是数组(假设html中有多个具有该名称的输入,就像您对这些字段所做的那样)。

–杰弗里·布雷克(Jeffrey Blake)
2010年7月23日在1:12



Jeffrey,我想知道我是否可以相信数组的顺序。也就是说,我们确定$ emails [1]对应于名为$ name [1]的用户吗?我认为过去我在这方面遇到问题,但我可能是错的。谢谢

– idrarig
2012年11月13日在11:19

@bruciasse-服务器处理这样的输入数组的方式在一个Web服务器之间会有所不同(当涉及到诸如此类的细粒度细节时,不同的OS会实现不同的功能),但是我采用这些技术的每个平台在本身(即每次的顺序都相同)。浏览器可能会在将请求传递到服务器之前混淆请求变量的顺序,但是我希望这是非常不寻常的。您可能面临的最后一个问题是html以奇怪的顺序混合并调整CSS

–杰弗里·布雷克(Jeffrey Blake)
2012年11月14日下午13:11

...定位如果您的页面是这样,它肯定会看到一些奇怪的问题,包括数组的排序。

–杰弗里·布雷克(Jeffrey Blake)
2012年11月14日下午13:12

#2 楼

例如。通过命名类似

<input type="text" name="item[0][name]" />
<input type="text" name="item[0][email]" />

<input type="text" name="item[1][name]" />
<input type="text" name="item[1][email]" />

<input type="text" name="item[2][name]" />
<input type="text" name="item[2][email]" />


的字段(通过javascript添加元素时也可以)

相应的php脚本可能看起来像
/>
function show_Names($e)
{
  return "The name is $e[name] and email is $e[email], thank you";
}

$c = array_map("show_Names", $_POST['item']);
print_r($c);


#3 楼

我现在知道的有点晚了,但是您可以执行以下操作:

function AddToArray ($post_information) {
    //Create the return array
    $return = array();
    //Iterate through the array passed
    foreach ($post_information as $key => $value) {
        //Append the key and value to the array, e.g.
            //$_POST['keys'] = "values" would be in the array as "keys"=>"values"
        $return[$key] = $value;
    }
    //Return the created array
    return $return;
}


测试的方法:

if (isset($_POST['submit'])) {
    var_dump(AddToArray($_POST));
}


对我来说这是生产的:

array (size=1)
  0 => 
    array (size=5)
      'stake' => string '0' (length=1)
      'odds' => string '' (length=0)
      'ew' => string 'false' (length=5)
      'ew_deduction' => string '' (length=0)
      'submit' => string 'Open' (length=4)


#4 楼



<fieldset>
<input type="text" name="item[1]" />
<input type="text" name="item[2]" />
<input type="hidden" name="fset[]"/>
</fieldset>

<fieldset>
<input type="text" name="item[3]" />
<input type="text" name="item[4]" />
<input type="hidden" name="fset[]"/>
</fieldset>


我添加了一个隐藏字段来计算字段集的数量。
用户可以添加或删除字段,然后将其保存。

#5 楼

我也遇到了这个问题。给定3个输入:field [],field2 [],field3 []

您可以动态访问每个这些字段。由于每个字段都是一个数组,因此相关字段将共享同一数组键。例如,给定输入数据:


Bob,bob @ bob.com,男性
Mark,mark @ mark.com,男性

Bob并且他的电子邮件和性别将共享同一密钥。考虑到这一点,您可以像这样在for循环中访问数据:

    for($x = 0; $x < count($first_name); $x++ )
    {
        echo $first_name[$x];
        echo $email[$x];
        echo $sex[$x];
        echo "<br/>";
    }


这也可以扩展。您需要做的就是在需要添加新字段时添加各自的数组变量。

#6 楼

但是,VolkerK的解决方案是避免电子邮件和用户名之间遗漏的最佳方法。因此,您必须像这样用PHP生成HTML代码:

<? foreach ($i = 0; $i < $total_data; $i++) : ?>
    <input type="text" name="name[<?= $i ?>]" />
    <input type="text" name="email[<?= $i ?>]" />
<? endforeach; ?>


更改$ total_data以满足您的需求。要显示它,就像这样:

$output = array_map(create_function('$name, $email', 'return "The name is $name and email is $email, thank you.";'), $_POST['name'], $_POST['email']);
echo implode('<br>', $output);


假设数据是使用POST方法发送的。

#7 楼

但是,您可以将以下代码用作

$a = array('name1','name2','name3');
$b = array('email1','email2','email3');

function f($a,$b){
    return "The name is $a and email is $b, thank you";
}

$c = array_map('f', $a, $b);

//echoing the result

foreach ($c as $val) {
    echo $val.'<br>';
}


#8 楼

这很简单:

foreach( $_POST['field'] as $num => $val ) {
      print ' '.$num.' -> '.$val.' ';
    }


#9 楼

使用此方法应该可以:

$name = $_POST['name'];
$email = $_POST['account'];
while($explore=each($email)) {
    echo $explore['key'];
    echo "-";
    echo $explore['value'];
    echo "<br/>";
}


评论


逐步说明您的答案

– krisdestruction
15年4月23日在22:09