Menu
Coddy logo textTech

자연 순서 정렬

Coddy PHP 여정의 논리 & 흐름 섹션에 포함된 레슨 — 68개 중 24번째.

PHP의 표준 정렬 함수는 대부분의 경우 잘 작동하지만, 숫자가 포함된 문자열을 정렬할 때 예상치 못한 결과를 초래할 수 있습니다. natsort() 함수는 인간이 자연스럽게 기대하는 방식으로 문자열을 정렬하는 "자연 순서(natural ordering)" 알고리즘을 사용하여 이 문제를 해결합니다.

파일 이름을 사용한 다음 예제를 살펴보세요:

<?php
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];

// 일반적인 sort()는 다음을 생성합니다: file1.txt, file10.txt, file2.txt, file20.txt
sort($files);
print_r($files);

// 배열 초기화
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];

// natsort()는 다음을 생성합니다: file1.txt, file2.txt, file10.txt, file20.txt
natsort($files);
print_r($files);
?>

차이점은 매우 중요합니다: 일반적인 sort()는 문자열을 한 글자씩 비교하므로, ASCII 코드에서 "1"이 "2"보다 앞에 오기 때문에 "file10.txt"가 "file2.txt"보다 먼저 옵니다. 하지만 natsort()는 숫자 부분을 인식하여 숫자 순서대로 정렬하므로, 자연스럽게 기대하는 것처럼 "file2.txt"를 "file10.txt"보다 앞에 배치합니다.

다른 PHP 정렬 함수들과 마찬가지로, natsort()는 원본 배열을 직접 수정합니다. 이로 인해 파일 목록, 버전 번호 또는 문자열 내에 포함된 숫자를 알파벳 순서가 아닌 숫자 순서로 정렬해야 하는 모든 데이터를 정리하는 데 특히 유용합니다.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

challenge icon

챌린지

쉬움

하나의 입력을 받게 됩니다: JSON 형식의 소프트웨어 버전 번호 배열입니다. 입력을 읽고, JSON 문자열을 배열로 변환한 다음, natsort()를 사용하여 버전 번호를 자연스러운 순서(natural order)로 정렬하고, print_r()를 사용하여 정렬된 배열을 출력하세요.

입력 형식: 버전 문자열의 JSON 배열을 포함하는 한 줄 (예시: ["v1.10","v1.2","v1.20","v1.3"])

예상 출력: print_r()를 사용하여 표시된 자연스러운 순서로 정렬된 배열

치트 시트

natsort() 함수는 "자연 순서(natural ordering)"를 사용하여 문자열을 정렬합니다. 이는 숫자가 포함된 문자열을 사람이 자연스럽게 기대하는 방식으로 정렬하는 방식입니다.

일반적인 sort()는 문자열을 한 글자씩 비교하는 반면, natsort()는 숫자 부분을 인식하여 수치적으로 정렬합니다:

$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];

// 일반적인 sort()의 결과: file1.txt, file10.txt, file2.txt, file20.txt
sort($files);

// natsort()의 결과: file1.txt, file2.txt, file10.txt, file20.txt
natsort($files);
print_r($files);

다른 PHP 정렬 함수와 마찬가지로, natsort()는 원본 배열을 직접 수정합니다. 이는 파일 목록, 버전 번호 또는 숫자가 포함되어 있어 수치적으로 정렬해야 하는 모든 데이터에 특히 유용합니다.

직접 해보기

<?php
// 입력 읽기
$input = fgets(STDIN);

// JSON 문자열을 배열로 변환
$versions = (array)json_decode($input, true);

// TODO: natsort()를 사용하여 배열을 정렬하는 코드를 아래에 작성하세요.


// 정렬된 배열 출력
print_r($versions);
?>
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

논리 & 흐름의 모든 레슨