HOWTO · PHP

How to Group Arrays in PHP

This tutorial demonstrates how to group elements of a multidimensional array according to a particular column in PHP.

On this page

PHP doesn’t have any built-in function to group arrays, but it can be achieved using loops.

Grouping an array helps to group array items by a single property.

Use the foreach Loop to Group Array by a Particular Property in PHP

<?php
$data_array = array(
    array(
        "Name" => "Mark",
        "Gender" => "Male",
        "EmployeeType" => "FullTime"
    ),
    array(
        "Name" => "Monica",
        "Gender" => "Female",
        "EmployeeType" => "FullTime"
    ),
    array(
        "Name" => "John",
        "Gender" => "Male",
        "EmployeeType" => "PartTime"
    ),
    array(
        "Name" => "Michelle",
        "Gender" => "Female",
        "EmployeeType" => "PartTime"
    )
);

$grouped_array = array();
foreach ($data_array as $element) {
    $grouped_array[$element['Gender']][] = $element;
}

$grouped_array1 = array();
foreach ($data_array as $element) {
    $grouped_array1[$element['EmployeeType']][] = $element;
}
echo "Array grouped according to gender: <br>";
print_r($grouped_array);
echo "<br><br>Array grouped according to employee type: <br>";
print_r($grouped_array1);
?>

Output:

Array grouped according to gender:
Array (
[Male] => Array (
[0] => Array ( [Name] => Mark [Gender] => Male [EmployeeType] => FullTime )
[1] => Array ( [Name] => John [Gender] => Male [EmployeeType] => PartTime ) )
[Female] => Array (
[0] => Array ( [Name] => Monica [Gender] => Female [EmployeeType] => FullTime )
[1] => Array ( [Name] => Michelle [Gender] => Female [EmployeeType] => PartTime ) ) )

Array grouped according to employee type:
Array (
[FullTime] => Array (
[0] => Array ( [Name] => Mark [Gender] => Male [EmployeeType] => FullTime )
[1] => Array ( [Name] => Monica [Gender] => Female [EmployeeType] => FullTime ) )
[PartTime] => Array (
[0] => Array ( [Name] => John [Gender] => Male [EmployeeType] => PartTime )
[1] => Array ( [Name] => Michelle [Gender] => Female [EmployeeType] => PartTime ) ) )

We arranged the array in multi-lines. The output shows two arrays, one according to Gender and the other is EmployeeType.

Use the group_array() to Create a Function That Can Group a Given Array in PHP

We can convert the code above into a function and then put the values.

<?php
function group_array($property, $data) {
    $grouped_array = array();

    foreach($data as $value) {
        if(array_key_exists($property, $value)){
            $grouped_array[$value[$property]][] = $value;
        }else{
            $grouped_array[""][] = $value;
        }
    }

    return $grouped_array;
}
echo "Array grouped according to gender: <br>";
print_r(group_array("Gender", $data_array));
echo "<br><br>Array grouped according to employee type: <br>";
print_r(group_array("EmployeeType", $data_array));
?>

We create a function group_array(), which takes two parameters, one is the property or key, and the other is the array.

Output:

Array grouped according to gender:
Array (
[Male] => Array (
[0] => Array ( [Name] => Mark [Gender] => Male [EmployeeType] => FullTime )
[1] => Array ( [Name] => John [Gender] => Male [EmployeeType] => PartTime ) )
[Female] => Array (
[0] => Array ( [Name] => Monica [Gender] => Female [EmployeeType] => FullTime )
[1] => Array ( [Name] => Michelle [Gender] => Female [EmployeeType] => PartTime ) ) )

Array grouped according to employee type:
Array ( 
[FullTime] => Array (
[0] => Array ( [Name] => Mark [Gender] => Male [EmployeeType] => FullTime )
[1] => Array ( [Name] => Monica [Gender] => Female [EmployeeType] => FullTime ) )
[PartTime] => Array ( 
[0] => Array ( [Name] => John [Gender] => Male [EmployeeType] => PartTime )
[1] => Array ( [Name] => Michelle [Gender] => Female [EmployeeType] => PartTime ) ) )