我有一个类似下面的表单发布到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[]" />
如果我使用下面的代码在php中回显它们
$name = $_POST['name'];
$email = $_POST['account'];
foreach( $name as $v ) {
print $v;
}
foreach( $email as $v ) {
print $v;
}
我会得到这样的东西:
name1name2name3email1email2email3
如何将这些数组转换为类似下面的代码
function show_Names($n, $m)
{
return("The name is $n and email is $m, thank you");
}
$a = array("name1", "name2", "name3");
$b = array("email1", "email2", "email3");
$c = array_map("show_Names", $a, $b);
print_r($c);
所以我的输出是这样的:
名称是 name1 ,电子邮件是 email1 ,谢谢你 名称是 name2 ,电子邮件是 email2 ,谢谢你 名称是 name3 ,电子邮件是 email3 ,谢谢
感谢您提供任何帮助或建议
答案 0 :(得分:134)
它们已经在数组中:$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";
}
要处理更多输入,只需扩展模式:
$name = $_POST['name'];
$email = $_POST['account'];
$location = $_POST['location'];
foreach( $name as $key => $n ) {
print "The name is ".$n.", email is ".$email[$key].
", and location is ".$location[$key].". Thank you\n";
}
答案 1 :(得分:44)
E.g。通过命名像
这样的字段<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);
答案 2 :(得分: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)
答案 3 :(得分:2)
答案 4 :(得分:2)
我也遇到过这个问题。给定3个输入:field [],field2 [],field3 []
您可以动态访问其中的每个字段。由于每个字段都是一个数组,因此相关字段将共享相同的数组键。例如,给定输入数据:
for($x = 0; $x < count($first_name); $x++ )
{
echo $first_name[$x];
echo $email[$x];
echo $sex[$x];
echo "<br/>";
}
这也可以扩展。您需要做的就是在需要添加新字段时添加各自的阵列变量。
答案 5 :(得分:0)
然而,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方法发送的。
答案 6 :(得分:0)
尽管如此,您可以使用以下代码,
$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>';
}
答案 7 :(得分:0)
这很简单:
foreach( $_POST['field'] as $num => $val ) {
print ' '.$num.' -> '.$val.' ';
}
答案 8 :(得分:-3)
使用此方法应该有效:
$name = $_POST['name'];
$email = $_POST['account'];
while($explore=each($email)) {
echo $explore['key'];
echo "-";
echo $explore['value'];
echo "<br/>";
}