PHP program to group the elements of an array based on the given function.

bookmark

<?php
// License: https://bit.ly/2CFA5XY
function groupBy($items, $func)
{
    $group = [];
    foreach ($items as $item) {
        if ((!is_string($func) && is_callable($func)) || function_exists($func)) {
            $key = call_user_func($func, $item);
            $group[$key][] = $item;
        } elseif (is_object($item)) {
            $group[$item->{$func}][] = $item;
        } elseif (isset($item[$func])) {
            $group[$item[$func]][] = $item;
        }
    }
    return $group;
}
print_r(groupBy(['one', 'two', 'three', 'four'], 'strlen'));

?>


Output:

Array
(
    [3] => Array
        (
            [0] => one
            [1] => two
        )

    [5] => Array
        (
            [0] => three
        )

    [4] => Array
        (
            [0] => four
        )

)