Nombre de clés Array similaires

voix
4

J'ai une requête POST à ​​venir à un de mes pages, voici un petit segment:

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

Cette demande peut être de toute taille, et chaque nom de produits et la clé de la quantité rencontrais comme « productN » et « quantityN », où N est un entier, à partir de 1.

Je voudrais pouvoir compter combien de clés uniques correspondent au format ci-dessus, ce qui me donnerait un compte de combien de produits ont été commandés (un nombre qui est pas explicitement donnée dans la demande).

Quelle est la meilleure façon de le faire en PHP?

Créé 26/08/2009 à 22:36
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
8

Eh bien, si vous savez que chaque produit aura une correspondance clé du tableau correspondant « productN », vous pouvez le faire:

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

preg_grep () fonctionne bien sur les tableaux pour ce genre de chose.

Créé 26/08/2009 à 22:50
source utilisateur

voix
1

Que signifie Gumbo avec son « tableau de l'utilisation à la place » commentaire est le suivant:

Dans votre HTML forme utilisez ceci:

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

et $_POST['quantity']sera alors un tableau de tous contenant toutes vos quantités.

Si vous devez fournir un identifiant, vous pouvez aussi le faire:

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

$_POST['quantity][0] tiendra ensuite la quantité correspondante.

Créé 26/08/2009 à 23:33
source utilisateur

voix
0

Comme mentionné par Gumbo vous pouvez grouper tous les paramètres décrivant un élément dans son propre tableau qui permet généralement plus facile de les itérer. Vous ne pouvez pas avoir le contrôle sur les paramètres POST mais vous pouvez les restructurer comme par exemple avec

<?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); 
Créé 26/08/2009 à 23:36
source utilisateur

voix
0

Bien qu'il y ait beaucoup d'être des exemples, si vous êtes assuré que les chiffres devraient être contigus, je prends habituellement l'approche:

<?php 
$i = 1; 
while( isset($_POST['product'.$i) )
{
    // do something
    $i++;
}
Créé 27/08/2009 à 03:40
source utilisateur

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