Mungkin membuat grouping data array dari database SQL mudah, cukup dengan menggunakan Query “GROUP BY”. Dalam kasus ini kita akan mengroupkan array yang di buat bukan dari database SQL. Misalakan kita memiliki multiple array seperti berikut :
1 2 3 4 5 6 7 8 9 10 11 |
$data_array[] = array("baris" => "kanan", "kolom" => "maju", ); $data_array[] = array("baris" => "kiri", "kolom" => "timur", ); $data_array[] = array("baris" => "kanan", "kolom" => "selatan", ); |
Array tersebut akan kita groupkan berdasarkan kolom baris. maka gunakan fungsi berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
function array_group_by( array $array, $key ) { if ( ! is_string( $key ) && ! is_int( $key ) && ! is_float( $key ) && ! is_callable( $key ) ) { trigger_error( 'array_group_by(): The key should be a string, an integer, or a callback', E_USER_ERROR ); return null; } $func = ( is_callable( $key ) ? $key : null ); $_key = $key; // Load the new array, splitting by the target key $grouped = []; foreach ( $array as $value ) { if ( is_callable( $func ) ) { $key = call_user_func( $func, $value ); } elseif ( is_object( $value ) && isset( $value->{ $_key } ) ) { $key = $value->{ $_key }; } elseif ( isset( $value[ $_key ] ) ) { $key = $value[ $_key ]; } else { continue; } $grouped[ $key ][] = $value; } // Recursively build a nested grouping if more parameters are supplied // Each grouped array value is grouped according to the next sequential key if ( func_num_args() > 2 ) { $args = func_get_args(); foreach ( $grouped as $key => $value ) { $params = array_merge( [ $value ], array_slice( $args, 2, func_num_args() ) ); $grouped[ $key ] = call_user_func_array( 'array_group_by', $params ); } } return $grouped; } |