PHP에서 우리는 일반적으로 배열을 정렬 해야하는 상황을 만나게됩니다. 일반 문자 또는 번호 분류의 경우 Sort () 및 Asort () 와 같은 기능이 필요를 충족시키기에 충분합니다. 그러나 특히 스트링 어레이를 처리 할 때보다 복잡한 사용자 정의 정렬을 수행해야 할 때보다 유연한 분류 방법을 사용해야합니다. 이 기사는 strnatcasecmp 함수와 Array_map을 사용하여 더 똑똑한 분류 방법을 달성하고 분류 효과를 향상시키는 방법을 소개합니다.
strnatcasecmp 는 php의 내장 문자열 비교 함수입니다. 문자열을 비교할 때는 문자 순서뿐만 아니라 숫자 크기의 순서를 고려할 수 있습니다. 예를 들어, strnatcasecmp는 "2"이전 "10"순위를 매기는 반면, strcmp는 이 조정을하지 않습니다.
한편, Array_Map 함수를 사용하면 배열의 각 요소에 콜백 함수를 적용하여 새 배열을 반환 할 수 있습니다. 따라서 strnatcasecmp를 array_map 과 결합하면 배열 정렬을 사용자 정의하는 데 매우 편리 할 수 있습니다.
다음은 strnatcasecmp 및 array_map을 사용하여 배열 정렬을 사용자 정의하는 방법을 보여주는 예입니다.
<?php
// 예제 배열
$array = ['item10', 'item2', 'item1', 'item20', 'item11'];
// 사용 array_map 각 요소를 처리합니다
$processedArray = array_map(function($item) {
// 각 요소를 처리하십시오,더 복잡한 작업이 필요한 경우 여기에 추가 할 수 있습니다.
return $item;
}, $array);
// 사용 strnatcasecmp 함수는 자연스럽게 정렬됩니다
usort($processedArray, 'strnatcasecmp');
// 정렬 된 배열 인쇄
echo '<pre>';
print_r($processedArray);
echo '</pre>';
?>
배열 정의 : 먼저 문자열과 숫자를 포함하는 $ 배열 의 혼합 배열을 정의합니다.
Array_Map 사용 :이 예에서는 array_map 의 기능이 크게 변경되지 않았지만 배열 요소를 사전 프로세스 요소에 대한 유연성을 제공합니다. array_map은 정렬 로직이 정렬하기 전에 배열 요소에 대한 일부 작업이 필요한 경우 (예 : 공백 제거, 케이스 변환 등) 유용합니다.
USORT 및 StrNATCASECMP 사용 : USORT 함수는 배열을 정렬하는 데 사용되며 StrnatCaseCMP 함수는 비교 콜백 함수로 사용됩니다. strnatcasecmp 함수는 숫자 부품이 올바르게 비교되고 정렬되도록 문자열의 자연 순서로 정렬됩니다.
출력 결과 : print_r 함수를 사용하여 정렬 된 배열을 인쇄하십시오. 최종 결과는 배열 요소가 자연 순서로 배열되며 숫자는 문자 순서보다는 수치 순서로 취급됩니다.
사용자 지정 정렬을위한 일반 정렬 () 또는 asort (), strnatcasecmp 및 array_map 과 비교하여 다음과 같은 장점이 있습니다.
정렬 숫자는 더 자연 스럽습니다 . 숫자가 포함 된 문자열의 경우 Strnatcasecmp는 숫자 부품을 실제 크기별로 하나씩 비교하는 대신 숫자 부품을 하나씩 정렬합니다. 예를 들어, "item10"은 "item2"보다 앞서 있으며 "Item20"은 "item11"뒤에있을 것이며, 이는 전통적인 특성 분류보다 인간 분류 습관과 더 일치합니다.
사용자 정의 사전 처리 : Array_Map을 사용하면 공백 제거, 균일 한 케이스 및 특정 변환 작업을 수행하는 등 정렬하기 전에 배열의 각 요소를 사용자 정의 할 수 있으므로 정렬을보다 유연하게 만듭니다.
Extensibility : Array_Map은 다른 기능과 함께 사용하여 논리를 분류하는 데 더 많은 확장 성과 유연성을 제공하며보다 복잡한 시나리오에 적합합니다.
배열 요소가 매우 복잡하거나 여러 차원에 따라 정렬 해야하는 경우 array_multisort 함수 또는 더 복잡한 콜백 로직을 사용하여 정렬 규칙을 추가로 사용자 정의하십시오.
PHP에서는 strnatcasecmp 및 array_map 조합을 사용하여 특히 숫자를 포함하는 문자열 배열의 경우보다 지능적이고 자연스러운 사용자 정의 분류를 쉽게 달성 할 수 있습니다. 이런 식으로, 종류의 정확성을 향상시킬 수있을뿐만 아니라 향후 확장을위한 유연성과 공간이 더 높아질 수 있습니다.