我有一个POST请求来到我的一个页面,这里有一小部分:
[shipCountry] => United States
[status] => Accepted
[sku1] => test
[product1] => Test Product
[quantity1] => 1
[price1] => 0.00
此请求可以是任意大小,每个产品名称和数量的密钥都会被称为“productN”和“quantityN”,其中N是一个整数,从1开始。
我希望能够计算出与上述格式匹配的唯一密钥数量,这可以计算出订购了多少产品(请求中未明确给出的数字)。
在PHP中执行此操作的最佳方法是什么?
答案 0 :(得分:8)
好吧,如果你知道每个产品都有一个匹配“productN”的相应数组键,你可以这样做:
$productKeyCount = count(preg_grep("/^product(\d)+$/",array_keys($_POST)));
对于那种事情,preg_grep()适用于数组。
答案 1 :(得分:1)
Gumbo对他的“使用数组而不是”评论意味着以下内容:
在您的HTML表单中使用:
<input type="text" name="quantity[]" />
然后$_POST['quantity']
将是包含所有数量的所有数组。
如果您需要提供身份证,您也可以这样做:
<input type="text" name="quantity[0]" />
$_POST['quantity][0]
将保留相应的数量。
答案 2 :(得分:0)
正如gumbo所提到的,你可以将描述一个项目的所有参数分组到自己的数组中,这通常可以更容易地迭代它们。您可能无法控制POST参数,但您可以重新构建它们,例如与
<?php
$testdata = array(
'shipCountry' => 'United States',
'status' => 'Accepted',
'sku1' => 'test1',
'product1' => 'Test Product1',
'quantity1' => '1',
'price1' => '0.01',
'sku2' => 'test2',
'product2' => 'Test Product2',
'quantity2' => '2',
'price2' => '0.02'
);
$pattern = '/^(.*\D)(\d+)$/';
$foo = array('items'=>array());
foreach($testdata as $k=>$v) {
if ( preg_match($pattern, $k, $m) ) {
$foo['items'][$m[2]][$m[1]] = $v;
}
else {
$foo[$k] = $v;
}
}
print_r($foo);
答案 3 :(得分:0)
虽然有很多例子,如果你保证这些数字应该是连续的,我通常采用这种方法:
<?php
$i = 1;
while( isset($_POST['product'.$i) )
{
// do something
$i++;
}