본문 바로가기

PHP111

[PHP] NumberFormatter로 '2000000'을 '이백만'으로 변환하기 안녕하세요. 오늘은 NumberFormatter로 '2000000'을 '이백만'으로 변환해보도록 하겠습니다. PHP에서 숫자에 쉼표(,)를 찍을 때, 우리는 보통 number_format(1000000) -> 1,000,000을 사용합니다. 하지만 만약 이 숫자를 '₩1,000,000'처럼 그 나라의 통화 기호를 붙여서 표시하거나, '일백만'이라는 한글 단어로 변환해야 한다면 PHP의 intl 확장 기능에 포함된 NumberFormatter 클래스를 활용할 수 있습니다.이 클래스는 'ko_KR'(한국)이나 'en_US'(미국) 같은 '로캘(Locale)'을 인식하여, 해당 국가의 규칙에 맞게 숫자를 변환해 줍니다. NumberFormatter 클래스는 mbstring처럼 별도의 intl 확장 기능이 .. 2025. 11. 5.
[PHP] IteratorAggregate - 루프에서 사용될 때 어떤 이터레이터를 사용할지 위임하기. [개념 설명]IteratorAggregate는 PHP의 SPL(Standard PHP Library)에 내장된 인터페이스입니다. 어떤 객체가 이 인터페이스를 구현하면, foreach 루프에서 사용될 때 어떻게 반복(iterate)해야 하는지를 다른 이터레이터 객체에게 위임할 수 있습니다. IteratorAggregate는 단 하나의 메소드, getIterator()만 구현하면 됩니다. 이 메소드는 반드시 Traversable 인터페이스(주로 Iterator 또는 다른 IteratorAggregate 객체)를 구현한 객체를 반환해야 합니다.[왜 Iterator 대신 IteratorAggregate를 사용할까요?]Iterator 인터페이스는 rewind(), current(), key(), next(), v.. 2025. 11. 3.
[PHP] 초성 검색 기능 구현하기 안녕하세요. 오늘은 'ㅁㅇㅋ'만 입력해도 '마이클' 검색되는 초성 검색 기능을 만들어보겠습니다. 예제 'ㅁㅇㅋ') * * @param string $str 한글 문자열 * @return string 추출된 초성 문자열 */function getChoseong(string $str): string { // 1. 초성 테이블 정의 $choseongList = [ 'ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ', 'ㄹ', 'ㅁ', 'ㅂ', 'ㅃ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ' ]; $result = ''; $strLength = mb_strlen($str); // 멀티바이트 문자열 길이 f.. 2025. 11. 2.
[PHP] sscanf()으로 문자열 파싱하기 안녕하세요. 오늘은 sscanf()으로 문자열 파싱해보도록 하겠습니다. 우리는 종종 로그 파일처럼 일정한 형식(예 : [날짜 시간] 레벨: 메시지) 을 가진 문자열을 파싱해야 할 때가 있습니다. 이럴 때 sscanf() 함수를 사용하면 마법처럼 깔끔하게 문제를 해결할 수 있습니다.sscanf는 우리가 제공한 '형식(format)'을 기반으로 문자열을 스캔하여, 원하는 부분을 변수에 담아줍니다. 예제 $date, 'time' => $time, 'level' => $level, // "ERROR" (콜론 없음) 'userId' => $userId, 'message' => isset($message) ? trim($message) : null];print_r($parsedD.. 2025. 10. 30.
[PHP] levenshtein로 유사 검색어 추천 기능 만들기 안녕하세요. 오늘은 levenshtein로 유사 검색어 추천 기능을 만들어보겠습니다. 사용자가 검색창에 '오랜지'라고 오타를 쳤을 때, "혹시 '오렌지'를 찾으셨나요?"라고 되물어보는 기능을 levenshtein()과 similar_text() 함수로 만들어보겠습니다. levenshtein(string1, string2) - '편집 거리(Edit Distance)'를 계산하는 함수입니다. - 한 문자열을 다른 문자열로 바꾸기 위해 몇 글자를 수정(추가, 삭제, 변경)해야 하는지 그 횟수를 정수로 반환합니다. - 이 함수는 글자(character) 단위가 아닌 바이트(byte) 단위로 계산합니다. - levenshtein('apple', 'apply') (영어) -> 1 (e -> y) - l.. 2025. 10. 29.
[PHP] Constructor Property Promotion (생성자 속성 승격) 생성자 속성 승격은 PHP 8.0부터 도입되었습니다. 클래스의 속성을 선언하고 생성자에서 그 값을 초기화 하는 반복적인 코드를 한줄로 줄여주는 기능입니다. 기존에는 클래스 상단에 속성을 선언, 생성자 매개변수를 받아 생성자 본문에서 $this -> $매개변수; 와 같이 일일이 할당 해야했습니다. 기존class Point{ public float $x; public float $y; public float $z; public function __construct( float $x, float $y, float $z ) { $this->x = $x; $this->y = $y; $this->z = $z; .. 2025. 10. 27.
[PHP] Fiber (파이버) 란 안녕하세요. 오늘은 PHP 8.1부터 도입된 기능인 Fiber 에 대해 알아보겠습니다. PHP 는 기본적으로 코드를 한줄 한줄 순서대로 실행합니다. 이 방식은 I/O 작업(외부 API를 호출하거나, 데이터베이스에 쿼리를 보내거나, 큰 파일 읽기와 같은 기다림이 필요한 작업)에서 문제가 발생합니다. '기다리는 시간' 동안 아무것도 하지 않고 CPU를 낭비하며 멍하니 멈춰있습니다.1초가 걸리는 API를 호출하면, PHP 스크립트 전체가 1초 동안 멈추게 됩니다. Fiber 는 이와 같은 상황에서 특정 작업을 일시 중단(Suspend) 시킬 수 있습니다. 즉, 기다리는 동안 다른 작업을 먼저 처리할 수 있도록 합니다. 예제start();// Fiber가 suspend()로 멈춘 동안, 메인 코드는 다른.. 2025. 10. 22.
[PHP] match 표현식 match는 하나의 값을 여러 조건과 비교하여 일치하는 경우 특정 값을 반환하는 표현식입니다. 기존의 switch가 문이었던 것과 차이점입니다. 이로 인해 코드가 간결해지고 예측 가능해집니다. $statusCode = 200;// switch 문 방식$message = '';switch ($statusCode) { case 200: $message = 'OK'; break; case 404: $message = 'Not Found'; break; case 500: $message = 'Server Error'; break; default: $message = 'Unknown Status'; .. 2025. 10. 20.
[PHP] SplMaxHeap 가장 큰 값이 항상 맨 위에 위치하는 자료구조 안녕하세요.오늘은 가장 큰 값이 항상 맨 위에 위치하는 자료구조인 SplMaxHeap에 대해 알아보겠습니다. SplMaxHeapSplMaxHeap은 PHP의 SPL(Standard PHP Library)이 제공하는 자료구조입니다. 이름에서 알 수 있듯이, 가장 큰(Max) 값이 항상 맨 위(Top)에 위치하도록 보장하는 저장소입니다. 데이터를 추가할 때마다 내부적으로 정렬 상태를 자동으로 유지하기 때문에, 언제든지 가장 큰 값을 즉시 조회하거나 꺼내올 수 있습니다. 실시간 랭킹이나 우선순위가 가장 높은 작업을 처리할 때 매우 유용합니다. 주요 메소드insert(value): 힙에 새로운 값을 추가합니다. 추가하는 즉시 힙 구조가 자동으로 재정렬됩니다.top(): 힙에서 값을 제거하지 않고 가장 큰 .. 2025. 10. 19.