현재 위치: > 최신 기사 목록> RSORT 정렬 후 키 이름이 손실되는 이유는 무엇입니까? 이 일반적인 문제를 해결하는 방법은 무엇입니까?

RSORT 정렬 후 키 이름이 손실되는 이유는 무엇입니까? 이 일반적인 문제를 해결하는 방법은 무엇입니까?

gitbox 2025-06-17

PHP에서는 종종 다양한 분류 기능을 사용하여 배열을 정렬합니다. RSORT ()는 정렬 배열 (큰에서 작은)을 역전시키는 데 사용되는 일반적인 함수 중 하나입니다. 그러나 많은 개발자들은 RSORT ()를 사용한 후 배열의 키 이름이 재설정되고 원래 키 이름이 손실된다는 것을 발견했습니다. 이로 인해 많은 사람들이 연관 어레이를 다루는 데 어려움을 겪게됩니다.

키 이름이 누락 된 이유는 무엇입니까?

RSORT ()는 인덱스 배열 (숫자 키)을 정렬하도록 특별히 설계된 기능입니다. 배열의 인덱스, 즉 0에서 시작하는 자동 색인을 재구성합니다 . 값을 정렬하고 연속 숫자 인덱스를 생성하도록 설계 되었기 때문에 원래 키 이름을 유지하지 않습니다.

간단히 말해서, rsort ()값과 재 인덱싱 된 배열별로 정렬 되며 일반적인 숫자 배열에 적합합니다.

예를 들어:

 <?php
$arr = [
    'a' => 3,
    'b' => 1,
    'c' => 2
];
rsort($arr);
print_r($arr);
?>

출력 결과는 다음과 같습니다.

 Array
(
    [0] => 3
    [1] => 2
    [2] => 1
)

보시다시피, 원래 키 이름 'a', 'b', 'c'는 완전히 사라져 연속 숫자 색인이되었습니다.


이 문제를 해결하는 방법?

키 이름으로 배열을 정렬하고 키 이름을 변경하지 않으면 다음을 고려할 수 있습니다.

1. Arsort () 사용

Arsort ()는 키 이름이 관련된 함수입니다. 배열 값을 반대로 리버스하고 키 이름을 변경하지 않아도됩니다.

예:

 <?php
$arr = [
    'a' => 3,
    'b' => 1,
    'c' => 2
];
arsort($arr);
print_r($arr);
?>

산출:

 Array
(
    [a] => 3
    [c] => 2
    [b] => 1
)

이런 식으로 키 이름 A, B, C는 손상되지 않습니다.

2. UASORT ()를 사용하여 정렬을 사용자 정의하십시오

Collation을 사용자 정의 해야하는 경우 uasort ()를 사용할 수 있으며 키 이름을 변경하지 않아도됩니다.

 <?php
$arr = [
    'a' => 3,
    'b' => 1,
    'c' => 2
];

uasort($arr, function($x, $y) {
    return $y <=> $x;  // 역 분류
});

print_r($arr);
?>

산출:

 Array
(
    [a] => 3
    [c] => 2
    [b] => 1
)

3. 키 이름 사용자 지정 정렬 예제를 보존하십시오

배열 구조가 약간 복잡한 경우 키 값 쌍을 추출하여 배열을 작성하기 전에 정렬 할 수 있습니다.


요약

  • RSORT ()는 원인이 정상 인덱스 배열 정렬에 적합한 배열을 다시 표시하기 때문에 키 이름을 잃습니다.

  • 키 이름을 유지 해야하는 경우 arsort () 또는 uasort ()를 사용해야합니다.

  • arsort ()는 값을 직접 반전시키고 키 이름을 보존합니다.

  • uasort ()는 분류 로직을 사용자 정의하고 유연성이 높을 수 있습니다.

이러한 기능의 차이점과 사용을 마스터하면 PHP 배열을보다 효율적으로 정렬하고 키 이름이 누락되어 발생하는 문제를 피할 수 있습니다.


 <?php
// 위의 내용을 통합 한 완전한 예

$arr = [
    'a' => 3,
    'b' => 1,
    'c' => 2
];

// 오류 데모:rsort키 이름이 손실됩니다
rsort($arr);
print_r($arr);

echo "\n";

// 올바른 데모:사용arsort保持键名역 분류
$arr = [
    'a' => 3,
    'b' => 1,
    'c' => 2
];
arsort($arr);
print_r($arr);

echo "\n";

// 맞춤형 분류 시연 uasort
$arr = [
    'a' => 3,
    'b' => 1,
    'c' => 2
];
uasort($arr, function($x, $y) {
    return $y <=> $x; // 역 분류
});
print_r($arr);
?>

더 많은 PHP 배열 정렬 팁은 gitbox.net/docs/php-arrays 를 참조하십시오.