Counting Values in Multidimensional Array
This can be done with a simple array_map
function
$array = array_map(function($element){
return $element['group'];
}, $array1);
$array2 = (array_count_values($array));
print_r($array2);
Your initial attempt was close. You were simply using the wrong key inside the loop:
$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']]++;
}
This can be done with a simple iteration:
$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;
}
Update for PHP 5.5
In PHP 5.5, which has added the array_column()
function to aggregate an inner key from a 2D array, this can be simplified to:
$counts = array_count_values(array_flip(array_column($array, 'group')));