2012-08-13 67 views
1

我不完全确定这个逻辑如何工作。我的大脑被炸,我不能清楚地思考。将一定数量的命名项从一个阵列移动到另一个阵列

我正在处理一些POST数据,并且此数组中的一个字段是数量字符串。我可以读取这个字符串,并确定是否有多个需要处理的小部件。

if($quantity <= 1){ //$_POST[widget1] } 

现在说有4个小工具。数量字段会反映这个数字,但我将如何循环遍历它们,并将它们自己分配给一个新数组?

$_POST[widget1], $_POST[widget2], $_POST[widget3], $_POST[widget4] 

我如何采取数量数量,并用它来抓取,许多与这些特定命名项目从后阵,使用一些外卡或前缀或什么的?我不知道这是一个for还是while,或者是什么样的操作。如何循环$ _POST ['widget * X *'],其中X是我的数量编号?

最终的结果是即时寻找已经阵列结构是这样的:

$widgets[data1] 
$widgets[data2] 
$widgets[data3] 
$widgets[data4] 

回答

5

使用for环,可以具有可变访问$_POST密钥,如$_POST["widget$i"]

$widgets = array(); 
for ($i=1; $i<=$quantity; $i++) { 
    // Append onto an array 
    $widgets[] = $_POST["widget$i"]; 
} 

但是,更好的长期解决方案是更改HTML表单,以便首先将[]添加到表单输入的name属性中,从而将数组首先传递回PHP:

<input type='text' name='widgets[]' id='widget1' value='widget1' /> 
<input type='text' name='widgets[]' id='widget2' value='widget2' /> 
<input type='text' name='widgets[]' id='widget3' value='widget3' /> 

通过$_POST['widgets']访问PHP,已经是一个数组!

var_dump($_POST['widgets']); 
2

遍历项目,至少在一个数量(如你描述它):

$widgets = array(); 
foreach (range(1, max(1, $quantity)) as $item) 
{ 
    $name = sprintf('widget%d', $item); 
    $data = sprintf('data%d', $item); 
    $widget = $_POST[$name]; 
    // do whatever you need to do with that $widget. 
    $widgets[$data] = $widget; 
}