PHP에서는 배열을 정렬 할 때 특히 연관 배열 (키 값 쌍 어레이)을 정렬 할 때 종종 키 이름이 중복되거나 정렬이 기대치를 충족하지 않습니다. Krsort는 키 이름별로 리버스 정렬을위한 PHP의 함수입니다. "키 복제가 분류로 이어지는"문제를 해결할 수 있습니까? 이 기사는 자세히 분석하고 특정 작업 예제를 제공합니다.
우선, PHP 배열의 주요 이름이 고유 한 것이 분명해야합니다. 배열에 값을 할당 할 때 중복 키 이름을 사용하는 경우 이후에 지정된 값이 이전 값을 덮어 씁니다. 예를 들어:
<?php
$arr = [
"key1" => "value1",
"key2" => "value2",
"key1" => "value3"
];
print_r($arr);
?>
출력 결과는 다음과 같습니다.
Array
(
[key1] => value3
[key2] => value2
)
key1이 반복 될 때, value1은 value3 에 의해 덮어 쓰고 실제로 마지막 할당 만 배열에 보유된다는 것을 알 수 있습니다.
따라서 PHP 배열에 키 이름을 중복하는 것은 불가능합니다 . 이는 중복 키 이름에 문제가 있다고 생각되면 배열 구조에 대한 이해가 잘못되었거나 다차원 배열 또는 일종의 중첩 구조를 사용하고 있음을 의미합니다.
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는 키의 독창성에 영향을 미치지 않으며 기존 키를 되돌립니다.
PHP 배열 키 이름의 고유 한 기능으로 인해 소위 "키 복제로 인한 분류 문제"는 다음을 참조 할 수 있습니다.
다차원 배열에서 다른 레벨의 주요 이름은 반복되지만 같은 수준에서 고유합니다.
필드별로 정렬하고 싶지만 키 이름은 고유하지 않거나 데이터 구조가 불합리합니다.
다음과 같은 다차원 배열이있는 경우 :
<?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는 키 이름으로 만 정렬됩니다.
키 이름의 복제를 피하기 위해 필드를 키로 사용해야하는 경우 먼저 키 이름을 필터링하거나 스플릿 할 수 있습니다.
<?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 로 정렬 할 수 있습니다.
PHP 배열의 키 이름은 고유해야하며 실제 "키 이름 복제"는 없습니다.
Krsort는 키 이름으로 정렬을 역전시키는 데 사용되며 키 이름의 복제 문제를 해결하지 않습니다.
데이터에 "반복 키"가있는 경우 종종 데이터 구조에 문제가 있으며 배열 구조를 재 설계해야합니다.
특정 필드로 정렬하려면 USORT 와 같은 사용자 정의 정렬 방법을 사용해야합니다.
키 이름으로 정렬하고 키 이름이 고유한지 확인하려면 필드를 연결하여 고유 한 다음 Krsort를 사용할 수 있습니다.
배열 키 정렬에 관심이 있으시면 공식 PHP 문서 : Krsort - 리버스 순서로 키별로 배열을 정렬하십시오.