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
)
보시다시피, 배열은 키 이름에 따라 역순으로 배열됩니다.
경우에 따라, 우리는 배열을 부분적으로 정렬하거나 정렬 후 특정 요소의 상대 순서를 유지하려고하지만 Krsort는 키 이름에 따라 항상 전 세계적으로 정렬되므로 원래 순서가 완전히 재 배열됩니다.
또한 키 이름 유형이 표준화되지 않은 경우 (예 : 숫자 키가 문자열 키와 혼합되어 있음) Krsort는 예상대로 작동하지 않을 수 있습니다. 또 다른 요점은 배열에서 동일한 키 이름을 가지고있는 경우 (키 이름이 고유하기 때문에 PHP에서 드물게) 키 이름이 비슷하지만 정확히 같은 문자열이 아닌 경우 순서에도 영향을 미칩니다.
정렬 할 때 요소의 순서를 부분적으로 보존 해야하는 경우 원래 순서를 먼저 저장 한 다음이 순서에 따라 조정할 수 있습니다.
$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를 사용하여 원래 순서의 키 이름 순서를 재조정하여 부분 정렬의 요구 사항을 실현합니다.
krsort 의 기본 리버스 정렬에 만족하지 않으면 uksort를 사용하여 키 이름 정렬 규칙을 사용자 정의 할 수 있습니다.
$array = [
'b' => 2,
'a' => 1,
'c' => 3,
];
// 按键名逆序종류,연관 배열 구조를 유지하십시오
uksort($array, function($k1, $k2) {
return strcmp($k2, $k1); // 역 비교 문자열
});
print_r($array);
이를 통해 정렬 동작을 완전히 제어 할 수 있습니다.
비즈니스 로직이 "주문"에 대한 요구 사항이 매우 높으면 배열 자체의 순서로 인한 순서 손실을 피하기 위해 오더 또는 객체 또는 양방향 링크 된 목록과 같은 키 이름을 지원하는 구조를 사용하는 것이 좋습니다.
<?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);
?>
Krsort는 키 이름을 기준으로 역 순서로 정렬됩니다. 기본적으로 요소 순서가 변경되지만 키 이름은 유지됩니다.
"잃어버린 주문"은 일반적으로 키 이름 정렬이 원래 순서를 다루기 때문입니다.
솔루션은 원래 순서를 저장하는 보조 작업을 결합하거나 UKSORT를 사용하여 사용자 지정 정렬을 구현하는 것입니다.
복잡한 시나리오에서는 순차적 문제를 피하기 위해 다른 데이터 구조를 고려하십시오.
위의 방법을 통해 원래 순서의 우발적 손실을 피하기 위해 연관 배열 분류 프로세스를보다 유연하게 제어 할 수 있습니다. 나는 당신에게 부드러운 코딩을 기원합니다!