PHP 함수 group_by()

1 개요[ | ]

PHP 함수 group_by()
PHP
CPU
0.0s
MEM
22M
0.0s
Copy
function group_by($column_name, $rows) {
	$result = [];
	$groups = distinct($rows, $column_name);
	foreach($groups as $group) {
		$result[$group] = where($rows, [$column_name=>$group]);
	}
	return $result;
}
function distinct($rows, $column_name) {
        $column_values = [];
        foreach($rows as $row) {
                $column_values[$row[$column_name]] = 1;
        }
        return array_keys($column_values);
}
function where($rows, $params) {
	$result = [];
	foreach($rows as $row) {
		$row_matched = true;
		foreach($params as $column_name => $column_value) {
			if( !array_key_exists($column_name, $row) 
			|| $row[$column_name] != $column_value ) {
				$row_matched = false;
				break;
			}
		}
		if( $row_matched ) $result[] = $row;
	}
	return $result;
}

$rows = [
	['id'=>1, 'name'=>'한놈',   'department_id'=>1, 'birth_date'=>'1999-01-01'],
	['id'=>2, 'name'=>'두시기', 'department_id'=>2, 'birth_date'=>'2000-01-01'],
	['id'=>3, 'name'=>'석삼',   'department_id'=>2, 'birth_date'=>'1999-01-01'],
	['id'=>4, 'name'=>'너구리', 'department_id'=>3, 'birth_date'=>'2000-01-01'],
];
print_r( group_by('birth_date', $rows) );

$rows = [
	['id'=>1, 'level'=>'WARN', 'message'=>'name missing'],
	['id'=>2, 'level'=>'INFO', 'message'=>'hello'],
	['id'=>3, 'level'=>'WARN', 'message'=>'duplicated id'],
	['id'=>4, 'level'=>'INFO', 'message'=>'world'],
];
print_r( group_by('level', $rows) );
Array
(
    [1999-01-01] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [name] => 한놈
                    [department_id] => 1
                    [birth_date] => 1999-01-01
                )

            [1] => Array
                (
                    [id] => 3
                    [name] => 석삼
                    [department_id] => 2
                    [birth_date] => 1999-01-01
                )

        )

    [2000-01-01] => Array
        (
            [0] => Array
                (
                    [id] => 2
                    [name] => 두시기
                    [department_id] => 2
                    [birth_date] => 2000-01-01
                )

            [1] => Array
                (
                    [id] => 4
                    [name] => 너구리
                    [department_id] => 3
                    [birth_date] => 2000-01-01
                )

        )

)
Array
(
    [WARN] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [level] => WARN
                    [message] => name missing
                )

            [1] => Array
                (
                    [id] => 3
                    [level] => WARN
                    [message] => duplicated id
                )

        )

    [INFO] => Array
        (
            [0] => Array
                (
                    [id] => 2
                    [level] => INFO
                    [message] => hello
                )

            [1] => Array
                (
                    [id] => 4
                    [level] => INFO
                    [message] => world
                )

        )

)

2 같이 보기[ | ]

  • PHP 파일 다운로드 구현 2 (한글 파일명 지원)
    제가 파일다운로드 관련된 것이 서툴러서 파일 다운로드 부분을 인용하였습니다. 죄송합니다.
  • PHP에서 오라클 DB 사용
    감사합니당. YoWu
  • PHP 파일 업로드 구현
    파일정보 출력에서 $name $ext 가 정상적으로 출력되나요? 전부 echo의 쌍따옴표안에 있는데? 일리단사오육칠
  • PHP 파일 업로드 구현
    PHP echo에서 쌍따옴표 안의 변수는 해석되어 출력됩니다. 위 소스에서도 $name와 $ext가 두껍게 나와있죠? 일반 문자열과는 다르다는 표시죠.J Jmnote
  • PHP 파일 다운로드 구현 2 (한글 파일명 지원)
    'Windows NT 6.1' << 이부분은 접속한 윈도우의 플랫폼을 뜻하는걸로 압니다. ie11 접속하면 다음과 같이 바뀌었고 Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko rv:11.0 << 이부분이 Anmkst
  • Lib my.php
    Fatal error: Uncaught Error: Call to undefined function insert_rows() in D:\xampp\htdocs\naru\import_excel.php:38 Stack trace: #0 {main} thrown in D:\xampp\htdo 신정섭
  • Lib my.php
    함수 query()를 사용하면 됩니다. 예시 추가했으니 참고바랍니다.J Jmnote
  • 로또번호 생성
    초보를 위한 개발 실습 과제로군요 ㅎㅎ Pinkcrimson