PHP 다중정렬 sortOrderBy()

Jmnote (토론 | 기여)님의 2021년 10월 2일 (토) 14:55 판 (→‎개요)

1 개요

PHP 다중정렬 sortValues()
<?php
function sortValues($array, $by, $ascending=[]) {
    $makeComparer = function ($criteria) {
        $comparer = function ($a, $b) use ($criteria) {
            for($i=0; $i<count($criteria[0]); $i++) {
                $key = $criteria[0][$i];
                $asc = $criteria[1][$i] ?? true;
                if ($a[$key] < $b[$key]) return $asc ? -1 : 1;
                if ($a[$key] > $b[$key]) return $asc ? 1 : -1;
            }
            return 0;
        };
        return $comparer;
    };
    $comparer = $makeComparer([$by, $ascending]);
    usort($array, $comparer);
    return $array;
}

$employees = [
	['EmployeeID'=>'1', 'Name'=>'한놈', 'BirthDate'=>'1999-01-01'],
	['EmployeeID'=>'2', 'Name'=>'두시기', 'BirthDate'=>'2000-01-01'],
	['EmployeeID'=>'3', 'Name'=>'석삼', 'BirthDate'=>'1999-01-01'],
	['EmployeeID'=>'4', 'Name'=>'너구리', 'BirthDate'=>'2000-01-01'],
];

# BirthDate 오름차순
$employees = sortValues($employees, ['BirthDate']);
echo preg_replace('/\\},/',"},\n",json_encode($employees,JSON_UNESCAPED_UNICODE))."\n\n";

# BirthDate 내림차순
$employees = sortValues($employees, ['BirthDate'],[false]);
echo preg_replace('/\\},/',"},\n",json_encode($employees,JSON_UNESCAPED_UNICODE))."\n\n";

# BirthDate, Name 오름차순
$employees = sortValues($employees, ['BirthDate','Name']);
echo preg_replace('/\\},/',"},\n",json_encode($employees,JSON_UNESCAPED_UNICODE))."\n\n";

# BirthDate 오름차순, Name 내림차순
$employees = sortValues($employees, ['BirthDate','Name'], [true,false]);
echo preg_replace('/\\},/',"},\n",json_encode($employees,JSON_UNESCAPED_UNICODE))."\n\n";

2 같이 보기

3 참고

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}