CodePráticov3.3.0
PHP

Como agrupar um array por campo em PHP

Agrupe registros por categoria, turma, status ou qualquer outro campo usando foreach e arrays associativos.

Agrupamento básico

$alunos = [
    ['nome' => 'Ana', 'turma' => '1A'],
    ['nome' => 'Carlos', 'turma' => '1B'],
    ['nome' => 'Daniel', 'turma' => '1A'],
];

$porTurma = [];

foreach ($alunos as $aluno) {
    $porTurma[$aluno['turma']][] = $aluno;
}

O resultado terá uma chave para cada turma e, dentro dela, os respectivos alunos.

Formato do resultado

[
    '1A' => [
        ['nome' => 'Ana', 'turma' => '1A'],
        ['nome' => 'Daniel', 'turma' => '1A'],
    ],
    '1B' => [
        ['nome' => 'Carlos', 'turma' => '1B'],
    ],
]

Agrupar por dois níveis

$resultado = [];

foreach ($alunos as $aluno) {
    $resultado[$aluno['escola']][$aluno['turma']][] = $aluno;
}

Quando a chave pode não existir

$grupo = $item['categoria'] ?? 'SEM_CATEGORIA';
$agrupados[$grupo][] = $item;