배열의 항목을 기준으로 내림차순,오름차순 정렬 함수
배열의 데이터를 기준으로 각각 오름차순, 내림차순 처리를 할 수 있는 함수 입니다.
샘플 데이터에선 이름, 나이, 몸무계로 확인이 가능 합니다.
/**
* sort_data
*
* @param array $data
* @param bool $nameAscending
* @param bool $ageAscending
* @param bool $weightAscending
*
* @return array
*
*/
function sort_data(array $data, bool $nameAscending = true, bool $ageAscending = true, bool $weightAscending = true ): array
{
usort($data, function ($a, $b) use ($nameAscending, $ageAscending, $weightAscending)
{
$nameComparison = $a['name'] <=> $b['name'];
$ageComparison = $a['age'] <=> $b['age'];
$weightComparison = $a['weight'] <=> $b['weight'];
if (!$nameAscending) {
$nameComparison *= -1;
}
if (!$ageAscending) {
$ageComparison *= -1;
}
if (!$weightAscending) {
$weightComparison *= -1;
}
return $nameComparison ?: ($ageComparison ?: $weightComparison);
});
return $data;
}
$data = [
['name' => '김철수', 'age' => 33, 'weight' => 75],
['name' => '박영희', 'age' => 33, 'weight' => 60],
['name' => '김미경', 'age' => 28, 'weight' => 55],
['name' => '이태호', 'age' => 28, 'weight' => 68],
];
// 이름 오름차순, 나이 오름차순, 체중 내림차순
$sorted_data4 = sort_data($data, true, true, false);
print_r($sorted_data4);
배열의 항목을 기준으로 내림차순,오름차순 정렬 함수를 아래는 클래스 버전 입니다.
class DataSorter {
public function sort_data(array $data, bool $nameAscending = true, bool $ageAscending = true, bool $weightAscending = true ): array
{
usort($data, function ($a, $b) use ($nameAscending, $ageAscending, $weightAscending) {
$nameComparison = $a['name'] <=> $b['name'];
$ageComparison = $a['age'] <=> $b['age'];
$weightComparison = $a['weight'] <=> $b['weight'];
if (!$nameAscending) {
$nameComparison *= -1;
}
if (!$ageAscending) {
$ageComparison *= -1;
}
if (!$weightAscending) {
$weightComparison *= -1;
}
return $nameComparison ?: ($ageComparison ?: $weightComparison);
});
return $data;
}
}
$dataSorter = new DataSorter();
$data = [
['name' => '김철수', 'age' => 28, 'weight' => 75],
['name' => '박영희', 'age' => 33, 'weight' => 60],
['name' => '김미경', 'age' => 28, 'weight' => 55],
['name' => '이태호', 'age' => 35, 'weight' => 68],
];
// 이름 오름차순, 나이 오름차순, 체중 오름차순
$sorted_data1 = $dataSorter->sort_data($data);
print_r($sorted_data1);
// 이름 내림차순, 나이 오름차순, 체중 오름차순
$sorted_data2 = $dataSorter->sort_data($data, false);
print_r($sorted_data2);
// 이름 오름차순, 나이 내림차순, 체중 오름차순
$sorted_data3 = $dataSorter->sort_data($data, true, false);
print_r($sorted_data3);
// 이름 오름차순, 나이 오름차순, 체중 내림차순
$sorted_data4 = $dataSorter->sort_data($data, true, true, false);
print_r($sorted_data4);
이런 경우는 객체생성을 하지 않고 static 넣어서 더블콜론:: 으로 사용해도 됩니다.
간단하게 생각해 생성자 필요 없고. 프라이빗 변수로 담아둘 필요성이 없지만 클래스로 몰아두고 싶은 경우 사용하면 됩니다.
- 모던php 사용시 흔하게 볼 수 있는 한가지 static
- PHP: Scope Resolution Operator (::) - Manual
class DataSorter {
public static function sort_data(array $data, bool $nameAscending = true, bool $ageAscending = true, bool $weightAscending = true ): array
{
usort($data, function ($a, $b) use ($nameAscending, $ageAscending, $weightAscending) {
$nameComparison = $a['name'] <=> $b['name'];
$ageComparison = $a['age'] <=> $b['age'];
$weightComparison = $a['weight'] <=> $b['weight'];
if (!$nameAscending) {
$nameComparison *= -1;
}
if (!$ageAscending) {
$ageComparison *= -1;
}
if (!$weightAscending) {
$weightComparison *= -1;
}
return $nameComparison ?: ($ageComparison ?: $weightComparison);
});
return $data;
}
}
$data = [
['name' => '김철수', 'age' => 28, 'weight' => 75],
['name' => '박영희', 'age' => 33, 'weight' => 60],
['name' => '김미경', 'age' => 28, 'weight' => 55],
['name' => '이태호', 'age' => 35, 'weight' => 68],
];
// 이름 오름차순, 나이 오름차순, 체중 내림차순
$sorted_data4 = DataSorter::sort_data($data, true, true, false);
print_r($sorted_data4);