如何将表单输入数组转换为PHP数组
我有一个类似下面的表单,发布到contacts.php,用户可以使用jquery动态添加更多如何将表单输入数组转换为PHP数组,php,arrays,forms,Php,Arrays,Forms,我有一个类似下面的表单,发布到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="nam
<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[]" />
我会得到这样的东西:
<? foreach ($i = 0; $i < $total_data; $i++) : ?>
<input type="text" name="name[<?= $i ?>]" />
<input type="text" name="email[<?= $i ?>]" />
<? endforeach; ?>
$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);
for($x = 0; $x < count($first_name); $x++ )
{
echo $first_name[$x];
echo $email[$x];
echo $sex[$x];
echo "<br/>";
}
名称1名称2名称3电子邮件1电子邮件2电子邮件3
如何将这些数组转换成下面的代码
$name = $_POST['name'];
$email = $_POST['account'];
foreach( $name as $v ) {
print $v;
}
foreach( $email as $v ) {
print $v;
}
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);
所以我的输出是这样的:
<? foreach ($i = 0; $i < $total_data; $i++) : ?>
<input type="text" name="name[<?= $i ?>]" />
<input type="text" name="email[<?= $i ?>]" />
<? endforeach; ?>
$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);
for($x = 0; $x < count($first_name); $x++ )
{
echo $first_name[$x];
echo $email[$x];
echo $sex[$x];
echo "<br/>";
}
姓名是name1,电子邮件是email1,谢谢姓名是name2,电子邮件是email2,谢谢
姓名是name3,电子邮件是email3,谢谢
感谢您的帮助或建议例如,将字段命名为
<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]" />
它们已经在数组中:
$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";
}
然而,VolkerK的解决方案是最好的,以避免电子邮件和用户名之间的遗漏。因此,您必须使用PHP生成如下HTML代码:
<? foreach ($i = 0; $i < $total_data; $i++) : ?>
<input type="text" name="name[<?= $i ?>]" />
<input type="text" name="email[<?= $i ?>]" />
<? endforeach; ?>
$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);
for($x = 0; $x < count($first_name); $x++ )
{
echo $first_name[$x];
echo $email[$x];
echo $sex[$x];
echo "<br/>";
}
如果你有一组字段集呢
<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>
我添加了一个隐藏字段来计算字段集的数量。
用户可以添加或删除字段,然后保存。我也遇到了这个问题。给定3个输入:字段[]、字段2[]、字段3[]
您可以动态访问这些字段中的每一个。由于每个字段都是一个数组,因此相关字段都将共享相同的数组键。例如,给定输入数据:
- 鲍勃,bob@bob.com,男
- 马克,mark@mark.com,男
Bob和他的电子邮件和性爱将共享同一个密钥。记住这一点,您可以访问for循环中的数据,如下所示:
<? foreach ($i = 0; $i < $total_data; $i++) : ?>
<input type="text" name="name[<?= $i ?>]" />
<input type="text" name="email[<?= $i ?>]" />
<? endforeach; ?>
$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);
for($x = 0; $x < count($first_name); $x++ )
{
echo $first_name[$x];
echo $email[$x];
echo $sex[$x];
echo "<br/>";
}
for($x=0;$x ”;
}
这也可以扩展。只要在需要添加新字段时添加相应的数组变量即可。使用此方法应该可以:
$name = $_POST['name'];
$email = $_POST['account'];
while($explore=each($email)) {
echo $explore['key'];
echo "-";
echo $explore['value'];
echo "<br/>";
}
$name=$\u POST['name'];
$email=$_POST['account'];
而($explore=每封($email)){
echo$explore['key'];
回声“-”;
echo$explore['value'];
回声“
”;
}
我知道现在有点晚了,但你可以这样做:
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)
尽管如此,您可以使用以下代码作为
$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>';
}
$a=array('name1'、'name2'、'name3');
$b=数组('email1'、'email2'、'email3');
功能f($a$b){
return“姓名为$a,电子邮件为$b,谢谢”;
}
$c=数组映射('f',$a,$b);
//呼应结果
外币($c作为$val){
回显$val.“
”;
}
这是一个简单的问题:
foreach( $_POST['field'] as $num => $val ) {
print ' '.$num.' -> '.$val.' ';
}
谢谢你,如果我添加了另一个输入,比如location[],我怎么也能添加呢?基本上,你只是扩展了这个模式。请参阅上面的编辑…当您从$\u POST分配任何其他输入时,它们也将是数组(假设html中有多个输入具有该名称,就像您对这些字段所做的那样)。Jeffrey,我想知道我是否可以信任数组的顺序。也就是说,我们是否确定$emails[1]
对应于名为$name[1]
的用户?我想我以前在这方面遇到过问题,但我可能错了。Thanks@bruciasse-服务器处理此类输入阵列的方式因web服务器而异(不同的操作系统在处理此类细粒度细节时的实现方式不同),但我使用这些技术的每个平台本身都是一致的(即每次的顺序都是相同的)。在将请求传递给服务器之前,浏览器可能会混淆请求变量的顺序,但我认为这是相当不寻常的。您可能面临的最后一个问题是html以奇怪的顺序混合,CSS调整。。。定位。如果你的页面是这样的,它肯定会看到一些奇怪的问题w/r/t数组排序。stepHi解释你的答案谢谢,你如何在laravel函数show_Names($e){return“name是$e[name],email是$e[email],谢谢”;}$c=array_map(“show_Names”,“$POST['item]”);印刷品(丙元);;