Contagem chaves do array similares

votos
4

Eu tenho um pedido POST vindo para uma das minhas páginas, aqui é um pequeno segmento:

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

Este pedido pode ser de qualquer tamanho, e cada nome de produtos e chave de quantidade iria se deparar como productN e quantityN, onde N é um número inteiro, a partir de 1.

Eu gostaria de ser capaz de contar quantas chaves únicas coincidir com o formato acima, que me daria uma contagem de quantos produtos foram encomendados (um número que não é explicitamente dada no pedido).

Qual é a melhor maneira de fazer isso em PHP?

Publicado 26/08/2009 em 22:36
fonte usuário
Em outras línguas...                            


4 respostas

votos
8

Bem, se você sabe que cada produto terá uma chave correspondente matriz correspondente "productN", você poderia fazer isso:

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

preg_grep () funciona bem em matrizes para esse tipo de coisa.

Respondeu 26/08/2009 em 22:50
fonte usuário

votos
1

O Gumbo significava com sua "matriz de uso em vez" comentário é o seguinte:

Em sua forma HTML usar este:

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

e $_POST['quantity'], então, ser uma matriz de todos contendo todas as suas quantidades.

Se você precisa fornecer um id você também pode fazer isso:

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

$_POST['quantity][0] passará a deter a quantidade correspondente.

Respondeu 26/08/2009 em 23:33
fonte usuário

votos
0

Embora haja uma abundância de exemplos, se você tem a garantia de que os números devem ser contíguos, eu costumo tomar a abordagem:

<?php 
$i = 1; 
while( isset($_POST['product'.$i) )
{
    // do something
    $i++;
}
Respondeu 27/08/2009 em 03:40
fonte usuário

votos
0

Como mencionado por Gumbo você poderia agrupar todos os parâmetros que descrevem um item em sua própria matriz que geralmente faz com que seja mais fácil para iterar eles. Você pode não ter controle sobre os parâmetros POST mas você pode reestruturar-los como por exemplo, com

<?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); 
Respondeu 26/08/2009 em 23:36
fonte usuário

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