
	                	                 
ArrayObject 클래스의 uksort 메서드는 키를 정렬할 때 중복되는 키를 처리하지 않습니다. 따라서, 중복되는 키가 있는 경우에는 uksort 메서드를 사용할 수 없습니다. 대신, 키를 정렬하기 전에 중복되는 키를 제거하거나, 중복되는 키를 하나의 키로 합쳐야 합니다.
중복되는 키를 제거하는 방법은 다음과 같습니다.
#hostingforum.kr
php
$array = [
    'a' => 1,
    'b' => 2,
    'a' => 3,
    'c' => 4,
];
$uniqueKeys = array_keys($array);
$uniqueArray = array_intersect_key($array, array_flip($uniqueKeys));
uksort($uniqueArray, function($a, $b) {
    return $a <=> $b;
});
print_r($uniqueArray);
중복되는 키를 하나의 키로 합쳐는 방법은 다음과 같습니다.
#hostingforum.kr
php
$array = [
    'a' => 1,
    'b' => 2,
    'a' => 3,
    'c' => 4,
];
$mergedArray = [];
foreach ($array as $key => $value) {
    if (isset($mergedArray[$key])) {
        $mergedArray[$key . '_'] = $value;
    } else {
        $mergedArray[$key] = $value;
    }
}
uksort($mergedArray, function($a, $b) {
    return $a <=> $b;
});
print_r($mergedArray);
uksort 메서드의 두 번째 인자인 comparison function을 사용하여 정렬 순서를 변경할 수 있습니다. comparison function은 두 키를 비교하여 정렬 순서를 결정합니다. 예를 들어, 키가 숫자인 경우에는 오름차순으로 정렬하고, 키가 문자열인 경우에는 역순으로 정렬할 수 있습니다.
#hostingforum.kr
php
$array = [
    '1' => 1,
    '2' => 2,
    '3' => 3,
    'a' => 1,
    'b' => 2,
    'c' => 3,
];
uksort($array, function($a, $b) {
    if (is_numeric($a) && is_numeric($b)) {
        return $a <=> $b;
    } elseif (is_numeric($a)) {
        return 1;
    } elseif (is_numeric($b)) {
        return -1;
    } else {
        return strlen($b) <=> strlen($a);
    }
});
print_r($array);
이 예제에서는 숫자 키는 오름차순으로 정렬하고, 문자열 키는 역순으로 정렬합니다.
2025-04-01 05:49