<?php
$array = [
"b" => 2,
"a" => 1,
"c" => 3,
];
krsort($array);
print_r($array);
?>
실행 후 출력 결과 :
Array
(
[c] => 3
[b] => 2
[a] => 1
)
여기서 주요 이름은 기대에 부응하는 문자별로 큰에서 작은 것으로 정렬됩니다.
krsort () 가 키 이름으로 정렬하면 키 이름은 자동으로 문자열 또는 정수로 처리됩니다. 배열의 주요 이름이 혼합되면 정렬 결과는 예상대로 아닐 수 있습니다.
예를 들어:
<?php
$array = [
2 => 'two',
"10" => 'ten',
1 => 'one',
];
krsort($array);
print_r($array);
?>
이 시점에서 키 이름 10 은 문자열이지만 실제로는 숫자 키이며 정수 처리로 변환되어 정렬 순서가 예상되는 순서와 일치하지 않을 수 있습니다.
krsort ()는 배열의 첫 번째 레이어 키 이름 만 정렬합니다. 다차원 배열 인 경우 내부 서브 어레이가 정렬되지 않습니다.
<?php
$array = [
"first" => ["b" => 2, "a" => 1],
"second" => ["d" => 4, "c" => 3],
];
krsort($array);
print_r($array);
?>
여기서는 첫 번째 레벨 키 이름 만 첫 번째 와 두 번째 로 분류하며 B, A, D 및 C 의 내부 키 이름은 변경되지 않습니다.
krsort ()는 배열 매개 변수 만 지원합니다. 비 어선 (객체 또는 문자열과 같은)이 전달되면 함수가 작동하지 않으며 오류를보고 할 수도 있습니다.
변수가 배열인지 확인하십시오
IS_ARRAY () 함수를 사용하여 오용을 피하십시오.
if (!is_array($array)) {
echo "통과 된 변수는 배열이 아닙니다,정렬 할 수 없습니다";
}
키 이름 유형이 일관된 지 확인하십시오
키 이름이 모두 문자열인지 정수인지 확인하여 혼합 및 정렬 예외를 유발하지 않도록하십시오.
foreach ($array as $key => $value) {
var_dump($key, gettype($key));
}
예상 계층 구조가 정렬되었는지 확인하십시오
다차원 배열의 경우 정렬 해야하는 레이어를 명확히해야합니다.
위의 문제에 대한 몇 가지 솔루션이 제공됩니다.
키 이름이 혼합되면 키 이름 유형이 먼저 통합됩니다.
<?php
$newArray = [];
foreach ($array as $key => $value) {
$newArray[(string)$key] = $value;
}
krsort($newArray);
print_r($newArray);
?>
이것은 숫자 줄의 혼란을 피합니다.
서브 어레이 키 이름을 정렬 해야하는 경우 재귀 메소드를 사용하십시오.
<?php
function recursive_krsort(&$array) {
if (!is_array($array)) return;
krsort($array);
foreach ($array as &$value) {
if (is_array($value)) {
recursive_krsort($value);
}
}
}
recursive_krsort($array);
print_r($array);
?>
<?php
if (is_array($array)) {
krsort($array);
} else {
echo "변수는 배열이 아닙니다,정렬 할 수 없습니다。";
}
?>
PHP krsort () 에 대한 자세한 지침 및 예제는 공식 문서에 액세스 할 수 있습니다.
<code> https://gitbox.net/manual/en/function.krsort.php </code>