Подсчет значений в многомерном массиве

В настоящее время у меня есть следующий массив:

Array( [0] => Array ( [user] => Name 1 [group] => 1 ) [1] => Array ( [user] => Name 2 [group] => 1 ) [2] => Array ( [user] => Name 3 [group] => 2 ) [3] => Array ( [user] => Name 4 [group] => 2 ) [4] => Array ( [user] => Name 5 [group] => 3 ) ) 

Я пытаюсь создать новый массив с различными значениями group в качестве ключа, а затем подсчитайте количество в каждой группе, чтобы дать следующее:

 Array ( [1] => 2 [2] => 2 [3] => 1 ) 

Я попытался использовать следующее, однако я получаю неопределенные предупреждения индексов:

 $newArr = array(); foreach ($details['user_groups'] as $key => $value) { $newArr[$value['user_groups']]++; } 

(Я проверял SO для других ответов, однако не мог найти попытку сделать то же самое)

Это можно сделать с помощью простой итерации:

 $counts = array(); foreach ($array as $key=>$subarr) { // Add to the current group count if it exists if (isset($counts[$subarr['group']]) { $counts[$subarr['group']]++; } // or initialize to 1 if it doesn't exist else $counts[$subarr['group']] = 1; // Or the ternary one-liner version // instead of the preceding if/else block $counts[$subarr['group']] = isset($counts[$subarr['group']]) ? $counts[$subarr['group']]++ : 1; } 

Обновление для PHP 5.5

В PHP 5.5, который добавил функцию array_column() для агрегирования внутреннего ключа из 2D-массива, это можно упростить:

 $counts = array_count_values(array_flip(array_column($array, 'group'))); 

Это можно сделать с помощью простой функции array_map

 $array = array_map(function($element){ return $element['group']; }, $array1); $array2 = (array_count_values($array)); print_r($array2); 

Ваша первоначальная попытка была близка. Вы просто использовали неправильный ключ внутри цикла:

 $newArr = array(); foreach ($details['user_groups'] as $key => $value) { // What you were using: // $newArr[$value['user_groups']]++; // What you should be using: $newArr[$value['group']]++; } 

Попробуйте этот простой, но эффективный способ

 $count = call_user_func_array('array_merge_recursive', $Array); echo count($count['user']).'<br>'; echo count($count['group']).'<br>';