Hello all, As per the How To Create an RFC instructions, I am sending this e-mail in order to get your feedback on my proposal. I propose introducing a function to PHP core named `array_group`. This function takes an array and a function and returns an array that contains arrays - groups of consecutive elements. This is very similar to Haskell's `groupBy` function. For some background as to why - usually, when people want to do grouping in PHP, they use hash maps, so something like: ``` <?php $array = [ [ 'id' => 1, 'value' => 'foo' ], [ 'id' => 1, 'value' => 'bar' ], [ 'id' => 2, 'value' => 'baz' ], ]; $groups = []; foreach ( $array as $element ) { $groups[ $element['id'] ][] = $element; } var_dump( $groups ); ``` This can now be achieved as follows (not preserving keys): ``` <?php $array = [ [ 'id' => 1, 'value' => 'foo' ], [ 'id' => 1, 'value' => 'bar' ], [ 'id' => 2, 'value' => 'baz' ], ]; $groups = array_group( $array, function( $a, $b ) { return $a['id'] == $b['id']; } ); ``` The disadvantage of the first approach is that we are only limited to using equality check, and we cannot group by, say, `<` or other functions. Similarly, the advantage of the first approach is that the keys are preserved, and elements needn't be consecutive. In any case, I think a utility function such as `array_group` will be widely useful. Please find attached a patch with a proposed implementation. Curious about your feedback. Best, |
array_group.patch
Description: Binary data