Podobné počítat klíče Array

hlasů
4

Mám požadavek POST příchodu do jedné z mých stránek, zde je malý úsek:

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

Tento požadavek může být libovolné velikosti a každé produkty jméno a klíč množství by působit jako „productN“ a „quantityN“, kde n je celé číslo, které začíná od 1.

Chtěl bych, aby bylo možné spočítat, kolik unikátních klíčů podle formátu výše, která by mi dát kolikrát produkty byly objednány (číslo, které není výslovně uveden v žádosti).

Jaký je nejlepší způsob, jak to udělat v PHP?

Položena 26/08/2009 v 22:36
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
8

No, pokud víte, že každý produkt bude mít zásadní shoda odpovídající pole „productN“, můžete udělat toto:

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

preg_grep () funguje na polích pro takové věci.

Odpovězeno 26/08/2009 v 22:50
zdroj uživatelem

hlasů
1

Co Gumbo znamenal jeho „použití pole namísto“ poznámka je následující:

Ve vašem HTML formuláře použít:

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

a $_POST['quantity']poté bude řada všechny obsahují všechny vaše množství.

Pokud potřebujete dodat id také můžete udělat:

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

$_POST['quantity][0] pak držet odpovídající množství.

Odpovězeno 26/08/2009 v 23:33
zdroj uživatelem

hlasů
0

Ačkoli tam bylo mnoho příkladů, pokud máte záruku, že čísla by měla být souvislé, obvykle beru přístup:

<?php 
$i = 1; 
while( isset($_POST['product'.$i) )
{
    // do something
    $i++;
}
Odpovězeno 27/08/2009 v 03:40
zdroj uživatelem

hlasů
0

Jak již bylo zmíněno by Gumbo byste mohli skupinu všechny parametry popisující jednu položku ve svém vlastním poli, které se obvykle usnadňuje jim opakovat. Nesmíte mít kontrolu nad parametry POST, ale můžete si je restrukturalizovat jako např

<?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); 
Odpovězeno 26/08/2009 v 23:36
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more