2010-08-20 66 views
1

我想要接收无限的$ _POST变量,包括一个附加数字,并将它们转换为数组,如贝宝形式。

例子:

<form action="mysite"> 
<input name="productname" /> 
<input name="productname1" /> 
<input name="productname2" /> 
Etc.... 
</form> 

我把它转换成一个PHP阵列收到后:

products(gta,twilight,flowers,chocolate,ipod) 

所以这只是解释你,我想其列为发票。

注:请不要建议使用的产品名称[],我想用预浸比赛做 感谢

+0

如果您认为您可以拥有无​​限数量的$ _POST(或$ _GET)变量,则会遇到麻烦。带有Suhosin补丁的服务器的默认最大值为100个变量。 – stillstanding 2010-08-20 06:27:26

+0

我添加了一个我认为你想要的解决方案。 – 2010-08-20 14:01:07

回答

4
<form action="mysite"> 
<input name="productname[]" /> 
<input name="productname[]" /> 
<input name="productname[]" /> 
Etc.... 
</form> 

然后$_POST['productname']将是一个数值数组所有值。

如果你无法控制的形式,你可以建立数组是这样的:

$res = array(); 
foreach ($_POST as $k => $v) { 
    if (preg_match('/^productname(\d{0,})$/', $k, $matches)) 
     $res[(int) $matches[1]] = $v; 
} 
// result in $res 
+0

嗨,我已经知道,我想要编程将它变成阵列使用一些preg比赛什么的......谢谢! – Ryan 2010-08-20 03:38:20

+0

@大卫,你能澄清一下吗? '$ _POST ['productname']'已经是一个数组了。你不需要使用'preg_match'。 – 2010-08-20 03:41:31

+0

我知道,但我想要的形式是像贝宝,他们应该在变量的末尾添加数字 – Ryan 2010-08-20 03:42:55

0

如果他们实际上并不拥有的名称号码,使用:

<form action="mysite"> 
<input name="productname[]" /> 
<input name="productname[]" /> 
<input name="productname[]" /> 
Etc.... 
</form> 

PHP会将productname转换为数组。 FAQ有关于此功能的更多信息。

+0

嗨,我已经知道,我想通过编程将它变成阵列,使用一些preg比赛或什么...谢谢! – Ryan 2010-08-20 03:39:12

1
<?php 
foreach($_POST as $name => $value) { 
    if(strpos($name, 'productname') === 0) { 
     // Do something with it 
    } 
} 
?>