현재 위치: > 최신 기사 목록> Krsort를 사용하여 PHP에서 배열 키 정렬 문제를 해결하십시오.

Krsort를 사용하여 PHP에서 배열 키 정렬 문제를 해결하십시오.

gitbox 2025-05-26

PHP에서는 배열을 정렬 할 때 특히 연관 배열 (키 값 쌍 어레이)을 정렬 할 때 종종 키 이름이 중복되거나 정렬이 기대치를 충족하지 않습니다. Krsort는 키 이름별로 리버스 정렬을위한 PHP의 함수입니다. "키 복제가 분류로 이어지는"문제를 해결할 수 있습니까? 이 기사는 자세히 분석하고 특정 작업 예제를 제공합니다.

1. PHP 배열 키 이름의 독창성

우선, PHP 배열의 주요 이름이 고유 한 것이 분명해야합니다. 배열에 값을 할당 할 때 중복 키 이름을 사용하는 경우 이후에 지정된 값이 이전 값을 덮어 씁니다. 예를 들어:

 <?php
$arr = [
    "key1" => "value1",
    "key2" => "value2",
    "key1" => "value3"
];
print_r($arr);
?>

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

 Array
(
    [key1] => value3
    [key2] => value2
)

key1이 반복 될 때, value1은 value3 에 의해 덮어 쓰고 실제로 마지막 할당 만 배열에 보유된다는 것을 알 수 있습니다.

따라서 PHP 배열에 키 이름을 중복하는 것은 불가능합니다 . 이는 중복 키 이름에 문제가 있다고 생각되면 배열 구조에 대한 이해가 잘못되었거나 다차원 배열 또는 일종의 중첩 구조를 사용하고 있음을 의미합니다.


2. Krsort의 역할

KRSORT 함수는 배열의 키 이름에 따라 정렬 (하강)을 역전시키는 데 사용되며 키 값 관계를 유지합니다. 함수 정의는 다음과 같습니다.

 bool krsort ( array &$array [, int $sort_flags = SORT_REGULAR ] )

예:

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

krsort($arr);
print_r($arr);
?>

출력 결과 :

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

Krsort는 키의 독창성에 영향을 미치지 않으며 기존 키를 되돌립니다.


3. 키 이름의 "중복"문제를 해결하는 방법은 무엇입니까?

PHP 배열 키 이름의 고유 한 기능으로 인해 소위 "키 복제로 인한 분류 문제"는 다음을 참조 할 수 있습니다.

  • 다차원 배열에서 다른 레벨의 주요 이름은 반복되지만 같은 수준에서 고유합니다.

  • 필드별로 정렬하고 싶지만 키 이름은 고유하지 않거나 데이터 구조가 불합리합니다.

3.1 솔루션 예제 1 : 배열 키 재구성

다음과 같은 다차원 배열이있는 경우 :

 <?php
$arr = [
    ["id" => 1, "name" => "Alice"],
    ["id" => 2, "name" => "Bob"],
    ["id" => 1, "name" => "Charlie"]
];

여기에는 "ID"에 대한 중복이 있지만 키 이름이 아닌 배열의 값입니다. "ID"필드를 정렬하려고합니다.

 <?php
// ~에 따르면id역 순서로 정렬하십시오
usort($arr, function($a, $b){
    return $b['id'] <=> $a['id'];
});

print_r($arr);
?>

이것은 Krsort 와 아무 관련이 없으며 Krsort는 키 이름으로 만 정렬됩니다.


3.2 솔루션 예제 2 : 고유 키를 사용하여 배열 재구성

키 이름의 복제를 피하기 위해 필드를 키로 사용해야하는 경우 먼저 키 이름을 필터링하거나 스플릿 할 수 있습니다.

 <?php
$arr = [
    ["id" => 1, "name" => "Alice"],
    ["id" => 2, "name" => "Bob"],
    ["id" => 1, "name" => "Charlie"]
];

// ~에 의해id그리고name고유 한 키로 조합
$newArr = [];
foreach ($arr as $item) {
    $key = $item['id'] . '_' . $item['name']; // 보장 된 키 고유
    $newArr[$key] = $item;
}

// 对键역 순서로 정렬하십시오
krsort($newArr);

print_r($newArr);
?>

이런 식으로 키 이름의 복제를 피할뿐만 아니라 Krsort 로 정렬 할 수 있습니다.


4. 요약

  • PHP 배열의 키 이름은 고유해야하며 실제 "키 이름 복제"는 없습니다.

  • Krsort는 키 이름으로 정렬을 역전시키는 데 사용되며 키 이름의 복제 문제를 해결하지 않습니다.

  • 데이터에 "반복 키"가있는 경우 종종 데이터 구조에 문제가 있으며 배열 구조를 재 설계해야합니다.

  • 특정 필드로 정렬하려면 USORT 와 같은 사용자 정의 정렬 방법을 사용해야합니다.

  • 키 이름으로 정렬하고 키 이름이 고유한지 확인하려면 필드를 연결하여 고유 한 다음 Krsort를 사용할 수 있습니다.

배열 키 정렬에 관심이 있으시면 공식 PHP 문서 : Krsort - 리버스 순서로 키별로 배열을 정렬하십시오.