I have an odd set of arrays that I need to count how many times specific values show in the results. Currently I have this bit of code.
$nested_arrays = shopp_orders( '2011-11-30 00:00:00', '2012-11-30 12:59:59', false, '', 2 );
print_r($nested_arrays);
This code pulls multiple arrays (serialized data) from the database and outputs like this
Array ( [30] => Purchase Object (
[purchased] => Array ( )
[columns] => Array ( )
[message] => Array ( )
[data] => Array ( )
[invoiced] => [authorized] => [captured] => [refunded] => [voided] => [balance] => 0 [downloads] => [shipable] => [shipped] => [stocked] => [_position:DatabaseObject:private] => 0 [_properties:DatabaseObject:private] => Array ( )
[_ignores:DatabaseObject:private] => Array ( [0] => _ )
[_map:protected] => Array ( )
[_table] => wp_shopp_demo_shopp_purchase [_key] => id [_datatypes] => Array (
[id] => int [customer] => int [shipping] => int [billing] => int [currency] => int [ip] =>
string [firstname] =>
string [lastname] =>
string [email] =>
string [phone] =>
string [company] =>
string [card] =>
string [cardtype] =>
string [cardexpires] => date [cardholder] =>
string [address] =>
string [xaddress] =>
string [city] =>
string [state] =>
string [country] =>
string [postcode] =>
string [shipname] =>
string [shipaddress] =>
string [shipxaddress] =>
string [shipcity] =>
string [shipstate] =>
string [shipcountry] =>
string [shippostcode] =>
string [geocode] =>
string [promos] =>
string [subtotal] => float [freight] => float [tax] => float [total] => float [discount] => float [fees] => float [taxing] => list [txnid] =>
string [txnstatus] =>
string [gateway] =>
string [paymethod] =>
string [shipmethod] =>
string [shipoption] =>
string [status] => int [data] =>
string [secured] =>
string [created] => date [modified] => date ) [_lists] => Array ( [taxing] => Array ( [0] => exclusive [1] => inclusive ) )
[id] => 30 [customer] => 12 [shipping] => 23 [billing] => 23 [currency] => 0 [ip] => 24.125.58.205 [firstname] => test [lastname] => test [email] =>
[email protected] [phone] => 1234567890 [company] => [card] => 1111 [cardtype] => Visa [cardexpires] => 1420070400 [cardholder] => test [address] => 123 Any Street [xaddress] => [city] => Danville [state] => VA [country] => US [postcode] => 24541 [shipname] => [shipaddress] => 123 Any Street [shipxaddress] => [shipcity] => Danville [shipstate] => VA [shipcountry] => US [shippostcode] => 24541 [geocode] => [promos] => Array ( ) [subtotal] => 49.37 [freight] => 9.98 [tax] => 9.874 [total] => 69.22 [discount] => 0 [fees] => 0 [taxing] => exclusive [txnid] => [txnstatus] => authed [gateway] => TestMode [paymethod] => credit-card-test-mode [shipmethod] => ItemRates-0 [shipoption] => Fast Shipping [status] => 0 [secured] => [created] => 1354096946 [modified] => 1354096946
)
[29] => Purchase Object (
[purchased] => Array ( )
[columns] => Array ( )
[message] => Array ( )
[data] => Array ( )
[invoiced] => [authorized] => [captured] => [refunded] => [voided] => [balance] => 0 [downloads] => [shipable] => [shipped] => [stocked] => [_position:DatabaseObject:private] => 0 [_properties:DatabaseObject:private] => Array ( )
[_ignores:DatabaseObject:private] => Array ( [0] => _ ) [_map:protected] => Array ( ) [_table] => wp_shopp_demo_shopp_purchase [_key] => id [_datatypes] => Array ( [id] => int [customer] => int [shipping] => int [billing] => int [currency] => int [ip] =>
string [firstname] =>
string [lastname] =>
string [email] =>
string [phone] =>
string [company] =>
string [card] =>
string [cardtype] =>
string [cardexpires] => date [cardholder] =>
string [address] =>
string [xaddress] =>
string [city] =>
string [state] =>
string [country] =>
string [postcode] =>
string [shipname] =>
string [shipaddress] =>
string [shipxaddress] =>
string [shipcity] =>
string [shipstate] =>
string [shipcountry] =>
string [shippostcode] =>
string [geocode] =>
string [promos] =>
string [subtotal] => float [freight] => float [tax] => float [total] => float [discount] => float [fees] => float [taxing] => list [txnid] =>
string [txnstatus] =>
string [gateway] =>
string [paymethod] =>
string [shipmethod] =>
string [shipoption] =>
string [status] => int [data] =>
string [secured] =>
string [created] => date [modified] => date ) [_lists] => Array ( [taxing] => Array ( [0] => exclusive [1] => inclusive ) )
[id] => 29 [customer] => 13 [shipping] => 26 [billing] => 25 [currency] => 0 [ip] => 70.176.223.40 [firstname] => Bryan [lastname] => Crawford [email] =>
[email protected] [phone] => 4802323049 [company] => ggg [card] => 1111 [cardtype] => Visa [cardexpires] => 1356998400 [cardholder] => ggg [address] => 1300 W Warner Rd [xaddress] => [city] => Gilbert [state] => AZ [country] => US [postcode] => 85224 [shipname] => [shipaddress] => 1300 W Warner Rd [shipxaddress] => [shipcity] => Gilbert [shipstate] => AZ [shipcountry] => US [shippostcode] => 85224 [geocode] => [promos] => Array ( ) [subtotal] => 29.95 [freight] => 9.98 [tax] => 0 [total] => 39.93 [discount] => 0 [fees] => 0 [taxing] => exclusive [txnid] => [txnstatus] => authed [gateway] => TestMode [paymethod] => credit-card-test-mode [shipmethod] => ItemRates-0 [shipoption] => Fast Shipping [status] => 0 [secured] => [created] => 1353538691 [modified] => 1353538691
)
)
This is order data from only two orders. I need to count how many times each state, each city, shipmethod, etc occur in the array. I tried the following but it only counted the 2 large arrays.
function count_nested_array_keys(array &$a, array &$res=array()) {
$i = 0;
foreach ($a as $key=>$value) {
if (is_array($value)) {
$i += count_nested_array_keys($value, &$res);
}
else {
if(!isset($res[$key])) $res[$key] = 0;
$res[$key]++;
$i++;
}
}
return $i;
}
$total_item_count = count_nested_array_keys($nested_arrays, $count_per_key);
echo "count per key: ", print_r($count_per_key), "\n";
If someone could show me how to count how many times each state value occurs,
example,
VA = 2
NC = 1
I can take it from there. Thank You.