Вопрос по php, arrays – Подсчет значений в многомерном массиве

6

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

<code>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
            )
)
</code>

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

<code>Array
(
    [1] => 2
    [2] => 2
    [3] => 1
)
</code>

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

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

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

Да, так что диапазон групп из первого массива (т.е. 1-3) в качестве ключей нового массива, а затем подсчитать, сколько в каждой группе, опять же из первого массива lethalMango
просто чтобы убедиться, что вы пытаетесь получитьgroup из первого массива? Gerep

Ваш Ответ

4   ответа
2

люч внутри цикла:

$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']]++;
}
0

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

array_map функция

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

$array2 = (array_count_values($array));

print_r($array2);
Уважаемый, @ Vijaysinh Parmar, где вы определили $ array1?
Уважаемый @Vijaysinh Parmar, спасибо за такой быстрый ответ. Я использовал свой собственный, но после вашего ответа я предпочитаю ваш. Спасибо
Вы можете ссылаться на массив вопросов как $ array1.
12

$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

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

$counts = array_count_values(array_flip(array_column($array, 'group')));
@gerep Не так, как у вас :) Я пропустил скобку, но уже исправил.
Я попробовал Майкла, используя код, который я включил в свой вопрос, однако я получаю неопределенные предупреждения об индексе. lethalMango
Извините, я увидел первую версию :) Работает шарм, я догадался, что упустил что-то очевидное! Спасибо lethalMango
@lethalMango Вы пробовали текущую версию, которая у меня есть? Это не будет давать неопределенные предупреждения индекса. Сначала я нажимаю кнопку сохранения, прежде чем завершить if / else
$counts[$subarr['group']++];

Похожие вопросы