1

我不完全确定逻辑将如何解决这个问题。我的大脑被炸了,我无法清晰地思考。

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

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

现在说有 4 个小部件。数量字段将反映这个数字,但我将如何遍历它们并将它们分配给自己的新数组?

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

我如何获取该数量编号,并使用某种通配符或前缀或其他东西从 post 数组中获取那么多和那些特定的命名项目?我不知道这是一个for, 或while, 还是什么类型的操作。如何循环访问 $_POST['widget* X *'],其中 X 是我的数量?

最终结果是我希望有一个结构如下的数组:

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

2 回答 2

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' />

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

var_dump($_POST['widgets']);
于 2012-08-13T20:50:43.377 回答
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;
}
于 2012-08-13T20:52:38.273 回答