【问题标题】:Count Similar Array Keys计算相似的数组键
【发布时间】:2009-08-26 21:36:53
【问题描述】:

我的一个页面收到一个 POST 请求,这里有一小段:

[shipCountry] => United States
[status] => Accepted
[sku1] => test
[product1] => Test Product
[quantity1] => 1
[price1] => 0.00

这个请求可以是任意大小,每个产品名称和数量的key都会遇到“productN”和“quantityN”,其中N是一个整数,从1开始。

我希望能够计算有多少唯一键与上述格式匹配,这样我就可以计算订购了多少产品(请求中未明确给出的数字)。

在 PHP 中最好的方法是什么?

【问题讨论】:

标签: php arrays post


【解决方案1】:

好吧,如果你知道每个产品都会有一个对应的数组键匹配“productN”,你可以这样做:

$productKeyCount = count(preg_grep("/^product(\d)+$/",array_keys($_POST)));

preg_grep() 在数组上工作得很好。

【讨论】:

  • 如果我只需要这些有价值的东西怎么办!=''
【解决方案2】:

Gumbo 的“使用数组代替”评论的含义如下:

在你的 HTML 表单中使用这个:

<input type="text" name="quantity[]" />

然后$_POST['quantity'] 将是一个包含所有数量的数组。

如果您需要提供 id,您也可以这样做:

<input type="text" name="quantity[0]" />

$_POST['quantity][0] 将持有相应的数量。

【讨论】:

    【解决方案3】:

    正如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); 
    

    【讨论】:

      【解决方案4】:

      虽然有很多例子,但如果你保证数字应该是连续的,我通常会采取这种方法:

      <?php 
      $i = 1; 
      while( isset($_POST['product'.$i) )
      {
          // do something
          $i++;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-18
        • 1970-01-01
        • 1970-01-01
        • 2018-05-31
        • 2020-03-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多