본문 바로가기

PHP108

[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.
[PHP] SplPriorityQueue로 중요 작업 먼저 처리하기 안녕하세요,오늘은 SplPriorityQueue를 활용하여 작업 목록 중 중요 작업 먼저 처리하는 방법을 알아보겠습니다. SplPriorityQueue일반적인 대기열(Queue)은 선입선출(FIFO) 방식으로 작업을 처리합니다.하지만 '긴급 문의'처럼 다른 것보다 먼저 처리해야 할 중요한 작업이 있는 경우, SplPriorityQueue를 사용하여 먼저 처리할 수 있습니다. SplPriorityQueue는 PHP의 SPL(Standard PHP Library)이 제공하는 자료구조입니다. 데이터를 큐에 넣을(insert) 때, 데이터와 함께 '우선순위'를 숫자로 지정할 수 있습니다.데이터를 꺼낼(extract) 때 SplPriorityQueue는 들어온 순서와 상관없이, 지정된 우선순위가 가장 높은 데이.. 2025. 10. 16.
[PHP] MultipleIterator 와 foreach로 여러 배열 동시에 반복하기 안녕하세요. 오늘은 MultipleIterator 와 foreach 를 활용하여 여러 배열 동시에 반복해보도록 하겠습니다. MultipleIterator 서로 다른 여러 배열의 같은 인덱스에 있는 값들을 한 번에 가져와야 할 때가 있습니다.보통 for 루프와 $i 인덱스를 사용하지만, 코드가 지저분해지기 쉽습니다.MultipleIterator를 활용하면 여러 배열(또는 이터레이터)을 하나로 묶어, foreach 루프 한 번으로 각 배열의 요소들을 동시에 접근할 수 있습니다. 예제상품 ID, 이름, 가격이 각각 다른 배열에 담겨 있을 때, MultipleIterator를 사용해 한 번에 출력하는 예제입니다. attachIterator(new ArrayIterator($ids), 'ID');$mi->.. 2025. 10. 15.
[PHP] 숫자 내장 함수: number_format, round, rand 함수 PHP를 개발하다 보면 변수를 출력하는 것 이상으로 숫자를 다뤄야 하는 경우가 있습니다. 예를 들어 상품가격을 표시하거나, 통계 데이터의 소수점을 처리하거나, 숫자를 무작위로 뽑아야하는 상황도 있습니다. PHP가 기본적으로 제공하는 숫자 관련 함수들을 사용하면 편리하게 작성이 가능합니다. 쇼핑몰에서 1200000원 보다는 1,200,000원 이라고 표시된 것이 훨씬 보기 편하죠? number_format() 함수는 이처럼 숫자의 천 단위마다 콤마(,)를 찍어주거나 소수점 자리를 깔끔하게 정리해 주는 역할을 합니다. // 기존 방식: number_format()$price = 1234567;echo number_format($price); // 출력: 1,234,567 소수점 처리$pi = 3.141592.. 2025. 10. 13.