PHP usort 사용자 정의 정렬을 사용해보기
한가로이 독학 초학자의 매일 투고 챌린지 10 일째
이번에는...
전회 기사에서 교시 받은 소트에 관한 비망록입니다.
@tadsan 감사합니다!
마지막 다중 연상 배열 구조
$arrs = [
["fruit" => "apple" ,"num" => 1 ],
["fruit" => "banana" ,"num" => 3 ],
["fruit" => "melon" ,"num" => 5 ],
["fruit" => "orange" ,"num" => 4 ],
["fruit" => "peach" ,"num" => 2 ],
];
여기를 num을 기준으로 오름차순으로 정렬하는 것이 목표입니다.
마지막 구현의 흐름
아래 소스 코드
//numとfruitの入れ替え
$replace_arrs=[];
foreach ($arrs as $key => $value) {
$replace_arrs[] = array_reverse($arrs[$key]);
}
//numを基準に昇順ソート
asort($replace_arrs);
foreach ($replace_arrs as $value) {
echo $value["num"].$value["fruit"]."<br>";
}
위에서도 num으로 오름차순 정렬할 수 있습니다만, 배열 구조가 바뀌고 있으므로 최적해가 아니었습니다・・・
가르쳐 준 구현의 흐름
아래 소스 코드
usort($arrs, fn($a, $b) => $a['num'] <=> $b['num']);
이것만으로 구조를 바꾸지 않고 스마트하게 정렬할 수 있는 것 같습니다. 대단한...
해독
usort
: 첫 번째 인수는 배열이고 두 번째 인수는 비교 함수로 전달됩니다. (비교 함수의 반환 값은 -1,0,1 중 하나여야 합니다.)배열의 모든 패턴을 비교해, -1이면 수시로 바꾸는 것 같습니다. 조건은 임의로 결정할 수 있습니다.
fn($a, $b) => $a['num'] <=> $b['num']
: 화살표 함수를 사용하고 우주선 연산자에서 num 값을 비교 처리합니다.위는 아래 코드와 동일합니다.
// アロー関数で下記を簡略可
// 引数にはusort第一引数の配列が自動で全通り入ります
function fn($a, $b){
// 宇宙船演算子で下記を簡略可
if($a['num'] == $b['num']{
return 0;
}
return ($a['num'] < $b['num']) ? 1 : -1;
}
php의 내장 함수는 항상 계속 진화하고 있음을 깨달았습니다 ...
로직을 생각하는 것은 역시 즐겁고 안쪽이 깊습니다
가르쳐 주신 여러분 감사합니다! !
Reference
이 문제에 관하여(PHP usort 사용자 정의 정렬을 사용해보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/taaachezi/items/aa6bc96d2be14d3f7f40텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)