У меня есть следующий массив, который я хочу подсчитать элемент «PaymentType» == paypal. Я использую этот метод $ totalcount = count(array_filter((array) $data[0], 'paypal'));
но получите предупреждение «paypal», должен быть действительным обратным вызовом «Оцените любой ответ, чтобы помочь мне разобраться в правильном направлении.
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 ) )
array_filter()
должен возвращать фильтрованный массив (а также нужна функция обратного вызова для работы, а не значение поиска) – вам не нужно это делать. Вот решение, которое действительно учитывает только совпадения:
$totalcount = 0; for ($i = 0, $c = count($data[0]); $i < $c; $i++) { if ($data[0][$i]['PaymentType'] === 'paypal') $totalcount++; }
array_filter()
требует обратного вызова для второго аргумента. Вы должны написать настраиваемую функцию, чтобы отфильтровать только те результаты, которые вы хотите, например:
$totalcount = count(array_filter($data, function($arr) { return $arr['PaymentType'] == 'paypal'; }));
Ваш фильтр нуждается в небольшой работе:
array_filter($data, function ($datum) { return $datum['paymentType'] == 'paypal'; })