현재 위치: > 최신 기사 목록> Krsort 정렬 중에 연관 배열 순서가 누락되지 않도록하는 방법

Krsort 정렬 중에 연관 배열 순서가 누락되지 않도록하는 방법

gitbox 2025-05-29

1. Krsort 의 기본 행동

Krsort 의 공식 정의 :

 bool krsort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
  • 기능 : 배열을 키 이름으로 반대로 정렬하면 키 이름이 보존됩니다.

  • 반환 값 : 정렬이 성공했는지 여부.

  • 참고 : 키 이름은 동일하게 유지되지만 요소 순서는 키 이름의 역 순서로 배열됩니다.

예를 들어:

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

krsort($array);

print_r($array);

산출:

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

보시다시피, 배열은 키 이름에 따라 역순으로 배열됩니다.


2. 원래 순서가 손실되는 이유는 무엇입니까?

경우에 따라, 우리는 배열을 부분적으로 정렬하거나 정렬 후 특정 요소의 상대 순서를 유지하려고하지만 Krsort는 키 이름에 따라 항상 전 세계적으로 정렬되므로 원래 순서가 완전히 재 배열됩니다.

또한 키 이름 유형이 표준화되지 않은 경우 (예 : 숫자 키가 문자열 키와 혼합되어 있음) Krsort는 예상대로 작동하지 않을 수 있습니다. 또 다른 요점은 배열에서 동일한 키 이름을 가지고있는 경우 (키 이름이 고유하기 때문에 PHP에서 드물게) 키 이름이 비슷하지만 정확히 같은 문자열이 아닌 경우 순서에도 영향을 미칩니다.


3. 주문을 피하기위한 해결책

1. 보조 배열을 사용하여 원래 순서를 저장하십시오

정렬 할 때 요소의 순서를 부분적으로 보존 해야하는 경우 원래 순서를 먼저 저장 한 다음이 순서에 따라 조정할 수 있습니다.

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

// 원래 순서를 저장하십시오
$originalKeys = array_keys($array);

// 지휘하다 krsort 종류
krsort($array);

// 특정 순서를 유지하려면,원래 순서로 재 배열하십시오
uksort($array, function($key1, $key2) use ($originalKeys) {
    $pos1 = array_search($key1, $originalKeys);
    $pos2 = array_search($key2, $originalKeys);
    return $pos1 - $pos2;
});

print_r($array);

위의 예에서 첫 번째 Krsort를 사용한 다음 Uksort를 사용하여 원래 순서의 키 이름 순서를 재조정하여 부분 정렬의 요구 사항을 실현합니다.


2. 사용자 정의 정렬 기능

krsort 의 기본 리버스 정렬에 만족하지 않으면 uksort를 사용하여 키 이름 정렬 규칙을 사용자 정의 할 수 있습니다.

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

// 按键名逆序종류,연관 배열 구조를 유지하십시오
uksort($array, function($k1, $k2) {
    return strcmp($k2, $k1);  // 역 비교 문자열
});

print_r($array);

이를 통해 정렬 동작을 완전히 제어 할 수 있습니다.


3. 순서 데이터 구조를 사용하십시오

비즈니스 로직이 "주문"에 대한 요구 사항이 매우 높으면 배열 자체의 순서로 인한 순서 손실을 피하기 위해 오더 또는 객체 또는 양방향 링크 된 목록과 같은 키 이름을 지원하는 구조를 사용하는 것이 좋습니다.


4. 샘플 코드 요약

 <?php

// 예제 배열
$array = [
    'b' => 2,
    'a' => 1,
    'c' => 3,
];

// 계획1:krsort + uksort원래 순서를 복원하십시오
$originalKeys = array_keys($array);

krsort($array);

uksort($array, function($key1, $key2) use ($originalKeys) {
    $pos1 = array_search($key1, $originalKeys);
    $pos2 = array_search($key2, $originalKeys);
    return $pos1 - $pos2;
});

print_r($array);

// 계획2:uksort自定义键名逆序종류
uksort($array, function($k1, $k2) {
    return strcmp($k2, $k1);
});

print_r($array);

?>

5. 요약

  • Krsort는 키 이름을 기준으로 역 순서로 정렬됩니다. 기본적으로 요소 순서가 변경되지만 키 이름은 유지됩니다.

  • "잃어버린 주문"은 일반적으로 키 이름 정렬이 원래 순서를 다루기 때문입니다.

  • 솔루션은 원래 순서를 저장하는 보조 작업을 결합하거나 UKSORT를 사용하여 사용자 지정 정렬을 구현하는 것입니다.

  • 복잡한 시나리오에서는 순차적 문제를 피하기 위해 다른 데이터 구조를 고려하십시오.

위의 방법을 통해 원래 순서의 우발적 손실을 피하기 위해 연관 배열 분류 프로세스를보다 유연하게 제어 할 수 있습니다. 나는 당신에게 부드러운 코딩을 기원합니다!