我一直在开发一个动态生成的表单,它将类似下面示例的多个项目传递给PHP脚本。
<div class="menu-item">
<input type="text" value="3" readonly="readonly" class="quantity" name="quantity">
<input type="text" value="Menu Item 3" readonly="readonly" class="item" name="item">
<input type="text" value="80.00" readonly="readonly" class="price" name="price">
</div>
...etc
我的问题是因为我没有为name
,quantity
和item
提供price
属性作为唯一标识符我正在通过这些参数传递到服务器端:
quantity=3&item=Menu+Item+3&price=80.00&quantity=2&item=Menu+Item+2&price=50.00&quantity=1&item=Menu+Item+1&price=30.00&total=370.00&name=Alex&table=10&terms=on
我可以很容易地改变它,所以name
s将是quantity1,item1,price1,quantity2,item2,price2等,但无论哪种方式,我都不确定如何最好地使用PHP循环这些参数集所以我可以确保处理与项目对应的每个quantity
,item
和price
。
谢谢, 亚历
答案 0 :(得分:6)
如果您将quantity[]
,item[]
和price[]
等字段命名,PHP会将它们组合成一个以每个事物命名的数组。只需确保页面上的所有数量,商品和价格都采用相同的顺序(并且没有一个跳过字段),$_POST['quantity'][0]
将是第一个数量,$_POST['price'][0]
第一个价格,等
答案 1 :(得分:0)
我通常做的是以下内容:
使用以下名称生成表单:quantity-x,item-x,price-x;
这是你处理它的方式:
$values = array();
foreach($_POST AS $key => $value ){
$keyPart = explode('-',$key);
$values[$keyPart[1]][$keyPart[0]] = $value
}
这将生成一个数组,其中每个元素都包含一个包含分组值的数组。因此,元素0将是[数量-1,价格-1,项目-1],1将是[数量-2,价格-2,项目-2]
这种方式的价值在于您无需跟踪元素的顺序。由于唯一标识符可以直接链接到数据库主键。在下行方面,您将不得不重复两次。
编辑:这也适用于$ _GET
答案 2 :(得分:0)
假设您只有通过GET进入的变量,这将是一种方式:
//number of fields/item
$fields = 3;
$itemCount = count($_GET) / $fields;
for ($i = 1; i <= $fields; i++) {
$quantity = $_GET['quantity'.i];
$item = $_GET['item'.i];
$price = $_GET['price'.i];
processFields($quantity, $item, $price);
}