PHP

php배열을 정렬시킬 땐 usort를 쓰자

미스털이 사용자 2021. 7. 21. 10:18
반응형

오늘은 usort에 대해 알아보자.

 

mysql에선 [order by]절이 있어서 자유자재로 정렬(asc 정순, desc 역순)이 가능하지만

php배열에 그런 간단한 기능이 없다.

방법이야 많지만 그걸 익히기가 쉽지 않은데, usort를 이용한 방법이 그나마 괜찮다.

 

<?
function print_array($arr) {
	foreach($arr as $a) {
		echo $a["name"] . " (나이 : ".$a["age"].")<BR>";
	}
}

$array_before = $array_after = $array_after_2 = array(
	array("name"=>"철수"		, "age"=>21),
	array("name"=>"영희"		, "age"=>20),
	array("name"=>"용재"		, "age"=>11),
	array("name"=>"길동"		, "age"=>38),
	array("name"=>"동탁"		, "age"=>9),
	array("name"=>"규소"		, "age"=>51),
	array("name"=>"경락"		, "age"=>175),
	array("name"=>"극락"		, "age"=>307),
);

usort($array_after, function ($item1, $item2) {
	if ($item1['age'] == $item2['age']) return 0; #같을 경우 통과
	return $item1['age'] < $item2['age'] ? 1 : -1; #삼항식을 통해 역순 배열
});

usort($array_after_2, function ($item1, $item2) {
	if ($item1['age'] == $item2['age']) return 0; #같을 경우 통과
	return $item1['age'] < $item2['age'] ? -1 : 1; #삼항식을 통해 정순 배열
});

?>
<pre>
※결과도출※
1) 정렬전
<?=print_array($array_before)?>

2) 정렬후 (역순)
<?=print_array($array_after)?>
      
3) 정렬후 (정순)
<?=print_array($array_after_2)?>
</pre>

 

반응형