편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
1번째 줄: | 1번째 줄: | ||
==개요== | ==개요== | ||
;PHP 다중정렬 sortValues() | ;PHP 다중정렬 sortValues() | ||
<syntaxhighlight lang='php' line run> | <syntaxhighlight lang='php' line run> | ||
<?php | |||
function sortValues($array, $by, $ascending=[]) { | function sortValues($array, $by, $ascending=[]) { | ||
$makeComparer = function ($criteria) { | $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; | $asc = $criteria[1][$i] ?? true; | ||
if ($a[$key] < $b[$key]) return $asc ? -1 : 1; | if ($a[$key] < $b[$key]) return $asc ? -1 : 1; | ||
16번째 줄: | 15번째 줄: | ||
return 0; | return 0; | ||
}; | }; | ||
return $comparer; | |||
}; | }; | ||
$comparer = $makeComparer([$by, $ascending]); | |||
usort($array, $comparer); | |||
return $array; | return $array; | ||
} | } | ||
29번째 줄: | 30번째 줄: | ||
# BirthDate 오름차순 | # BirthDate 오름차순 | ||
$ | $employees = sortValues($employees, ['BirthDate']); | ||
echo preg_replace('/\\},/',"},\n",json_encode($employees,JSON_UNESCAPED_UNICODE))."\n\n"; | |||
# BirthDate 내림차순 | # BirthDate 내림차순 | ||
$ | $employees = sortValues($employees, ['BirthDate'],[false]); | ||
echo preg_replace('/\\},/',"},\n",json_encode($employees,JSON_UNESCAPED_UNICODE))."\n\n"; | |||
# BirthDate, Name 오름차순 | # BirthDate, Name 오름차순 | ||
$ | $employees = sortValues($employees, ['BirthDate','Name']); | ||
echo preg_replace('/\\},/',"},\n",json_encode($employees,JSON_UNESCAPED_UNICODE))."\n\n"; | |||
# BirthDate 오름차순, Name 내림차순 | # BirthDate 오름차순, Name 내림차순 | ||
$ | $employees = sortValues($employees, ['BirthDate','Name'], [true,false]); | ||
echo preg_replace('/\\},/',"},\n",json_encode($employees,JSON_UNESCAPED_UNICODE))."\n\n"; | |||
</syntaxhighlight> | </syntaxhighlight> | ||