Benzer Dizi Keys Toplamı

4 Cevap php

Burada küçük bir segment, benim sayfalarından birine gelen bir POST isteği var:

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

Bu istek herhangi bir boyutta olabilir ve her ürün adı ve miktarı temel 1'den başlayarak, N bir tamsayı olduğu "productN" ve "quantityN" olarak rastlamak olacaktır.

Ben birçok benzersiz anahtarlar bana (açıkça istek verilmeyen bir sayı) emredildi kaç ürün sayımını verecek olan, yukarıda biçimini maç nasıl saymak mümkün olmak istiyorum.

PHP bunu yapmanın en iyi yolu nedir?

4 Cevap

Eğer her ürün ilgili bir dizi anahtar eşleştirme "productN" sahip olacağını biliyorum eğer Eh, bunu yapabilirsiniz:

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

preg_grep() bu tür bir şey için dizilerin iyi çalışır.

Bamya, onun ne demek istediğini "kullanımı dizinin yerine" açıklama aşağıdaki gibidir:

HTML-form kullanımı bu:

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

ve $_POST['quantity'] sonra miktarlarda tüm içeren tüm bir dizi olacak.

Bir id tedarik gerekiyorsa da bunu yapabilirsiniz:

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

$_POST['quantity][0] ardından gelen miktar tutacaktır.

Eğer grup genellikle kolay bunları yinelemek için yapar, kendi dizideki tek bir öğeyi açıklayan tüm parametreleri olabilir bamya tarafından belirtildiği gibi. Sen POST parametreleri üzerinde kontrole sahip olmayabilir ama örneğin gibi onları yeniden yapabilirsiniz ile

<?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);

Örnekler bol olacak olsa sayılar bitişik olması gerektiğini garanti ediyorsanız, ben genellikle bir yaklaşım:

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