
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