2012-01-03 94 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'; })