2012-01-03 157 views
0

我有以下数组,我想要计算“PaymentType”==贝宝的元素。我正在使用此方法 $ totalcount = count(array_filter((array) $data[0], 'paypal')); 但收到警告“'paypal',应该是有效的回调” 感谢任何回应,帮助我朝着正确的方向前进。PHP多维阵列计数

Array 
(
[0] => Array 
    (
     [TransactionDate] => 0000-00-00 00:00:00 
     [TotalAmount] => 0.00 
     [PayPalFee] => 2.48 
     [PayPalTransactionID] => 92 
     [PaymentType] => paypal 
    ) 

[1] => Array 
    (
     [TransactionDate] => 0000-00-00 00:00:00 
     [TotalAmount] => 0.00 
     [PayPalFee] => 2.48 
     [PayPalTransactionID] => 3 
     [PaymentType] => paypal 
    ) 

[2] => Array 
    (
     [TransactionDate] => 2011-05-16 11:15:02 
     [TotalAmount] => 75.00 
     [PayPalFee] => 2.48 
     [PayPalTransactionID] => 2 
     [PaymentType] => paypal 
    ) 
) 
+2

'array_filter'需要** **回调作为第二个参数,如文档中描述:http://php.net/manual/en/function。阵列filter.php。在那里你还会找到关于如何使用'array_filter'的例子。 – 2012-01-03 14:44:19

回答

1

array_filter()应该返回滤波阵列(和也需要一个回调函数来工作,而不是搜索值) - 你不需要这样做。这里是一个真正只计算匹配的解决方案:

$totalcount = 0; 
for ($i = 0, $c = count($data[0]); $i < $c; $i++) 
{ 
    if ($data[0][$i]['PaymentType'] === 'paypal') 
     $totalcount++; 
} 
3

array_filter()需要第二个参数的回调。你必须写一个自定义函数来过滤出你想要的结果,象下面这样:

$totalcount = count(array_filter($data, function($arr) 
{ 
    return $arr['PaymentType'] == 'paypal'; 
})); 
1

你的过滤器需要一点的工作:

array_filter($data, function ($datum) { return $datum['paymentType'] == 'paypal'; })