배열 데이터 구조 활용
PHP 에서 데이터를 효과적으로 관리하기 위해서는 배열의 유형을 정확히 구별하여 사용해야 합니다. 주요 형태로는 키와 값을 가진 연관 배열과 순차적인 숫자 인덱스를 사용하는 수치 배열이 있습니다.
연관 배열 구성
특정 이름을 가지는 요소들을 저장할 때 연관 배열이 적합합니다. 아래 예시는 직원 나이를 이름에 매핑하여 정의하는 과정을 보여줍니다.
// 직원의 나이 정보 매핑
$staff_data = [
'김철수' => 30,
'이영희' => 28,
'박민수' => 35
];
// 특정 키를 통해 데이터 접근
echo $staff_data['이영희'] . " 세 입니다.";
// 전체 목록 반복 출력
foreach ($staff_data as $name => $age) {
echo "이름: {$name}, 나이: {$age}<br>";
}
수치 배열 순회
순서가 중요한 리스트 처리 시에는 인덱스 기반의 접근이 유용합니다. 배울 길이 계산 후 순차적으로 읽는 방식입니다.
$cars_model = ['아반떼', '구르니', '스팅'];
$total_count = count($cars_model);
for ($idx = 0; $idx < $total_count; $idx++) {
echo $cars_model[$idx] . "<br>";
}
배열 전용 함수 적용
복잡한 배열 작업은 내장 함수를 사용하여 간결하게 처리할 수 있습니다.
- array_column(): 다차원 배열에서 특정 컬럼만 추출하여 일차원 배열로 변환합니다.
- array_merge(): 서로 다른 두 개 이상의 배열을 하나의 배열로 합칩니다.
- array_push(): 기존 배열의 끝에 새로운 요소를 추가합니다.
// 색상 목록 확장 예제
$colors = ['빨강', '초록'];
array_push($colors, '파랑', '노랑');
var_dump($colors);
// 결과: array(4) { [0]=> string ... }
문자열 처리 기술
입력된 문자열의 상태를 파악하거나 정제할 때는 문자열 관련 함수가 필수적입니다.
길이 확인 및 공백 제거
strlen() 은 주어진 문자열의 바이트 수를 리턴하며, trim() 은 앞뒤의 불필요한 공백을 제거하여 정제된 문자열을 제공합니다.
$message = " Welcome User ";
$clean_msg = trim($message);
$len = strlen($clean_msg);
echo "정제된 길이는 {$len} 입니다.";
함수 인터페이스 및 반환값
함수 내부에서 파라미터를 주고받는 방식과 반환 타입 처리는 안정성 확보의 핵심입니다.
인수 전달 및 반환 객체 생성
기본값을 설정하거나 복잡한 데이터 구조 (어레이) 를 반환하는 패턴은 서비스 레이어 호출 시 자주 사용됩니다.
public function searchList(array $criteria = [])
{
// 검색 로직 수행
$items = fetchFromDatabase($criteria);
return [
'result' => $items,
'meta' => getPaginationInfo()
];
}
// 호출부 예시
$response = $this->searchList(['category' => 'electronics']);
변수 존재 여부와 상태 체크
변수가 정의되었는지 확인하고 값이 비었는지를 판별할 때는 isset() 과 empty() 를 적절히 구분하여 사용합니다. 특히 데이터베이스 업데이트 결과는 성공 시 영향받은 행 수 (정수) 를, 실패 시 false 또는 오류를 반환하므로 엄격한 비교 연산자가 필요합니다.
// 변수 할당 여부 확인
$config_value = 'production';
if (isset($config_value)) {
// 유효한 설정 처리
}
// 데이터 변경 작업 결과 처리
// false 를 방지하기 위해 동등 비교 사용 권장
$status = $repository->updateItem($id, $newData);
if ($status === false) {
throw new RuntimeException("데이터 갱신 실패");
} else {
// 변경된 레코드 수는 $status 에 포함됨
logUpdateCount($status);
}