'array_walk'로 배열 순회하기
Coddy PHP 여정의 논리 & 흐름 섹션에 포함된 레슨 — 68개 중 44번째.
array_walk() 함수는 array_map()과 비교하여 배열을 처리하는 다른 접근 방식을 제공합니다. array_map()은 변환된 값으로 새 배열을 생성하는 반면, array_walk()는 각 요소에 콜백 함수를 직접 적용하여 원래 배열을 수정합니다.
이 함수는 복사본을 생성하지 않고 기존 배열을 변경하려는 경우에 특히 유용합니다. 제공하는 콜백 함수는 각 배열 요소를 참조로 전달받으므로 원래 값을 직접 수정할 수 있습니다.
<?php
function addPrefix(&$value, $key) {
$value = "Item: " . $value;
}
$items = ["apple", "banana", "orange"];
array_walk($items, "addPrefix");
// $items는 이제 다음과 같습니다: ["Item: apple", "Item: banana", "Item: orange"]
?>콜백 함수가 배열 요소를 참조 방식으로 받기 위해 &$value를 어떻게 사용하는지 확인해 보세요. 이를 통해 함수가 원본 배열 요소를 직접 수정할 수 있습니다. 두 번째 매개변수인 $key는 현재 요소의 키에 대한 접근을 제공하지만, 단순한 변환 작업에서는 항상 필요한 것은 아닙니다.
array_walk()는 콜백 함수에 추가 데이터를 직접 전달할 수 있는 선택적인 세 번째 인수도 지원합니다. 이는 변환 작업이 배열 외부에서 정의된 값(예: 접두사, 접미사 또는 기타 동적 입력)에 의존할 때 유용합니다.
array_walk()에 세 번째 인수를 전달하면, 콜백 함수는 이를 세 번째 매개변수로 받습니다:
<?php
function addCategory(&$value, $key, $category) {
$value = $category . ": " . $value;
}
$products = ["laptop", "mouse", "keyboard"];
$prefix = "Electronics";
array_walk($products, "addCategory", $prefix);
// $products는 이제 다음과 같습니다: ["Electronics: laptop", "Electronics: mouse", "Electronics: keyboard"]
?>여기에서 $prefix는 array_walk()의 세 번째 인수로 전달되며, 콜백은 이를 $category로 받습니다. 이 방식을 통해, 내부의 값을 하드코딩하지 않고도 서로 다른 접두사를 사용하여 동일한 콜백 함수를 재사용할 수 있습니다.
챌린지
쉬움두 개의 입력을 받게 됩니다: 쉼표로 구분된 제품 이름 목록과 카테고리 접두사입니다. 첫 번째 입력은 laptop,mouse,keyboard,monitor와 같은 형식의 문자열로 된 제품 이름들이며, 두 번째 입력은 카테고리 접두사 텍스트(예: Electronics)입니다.
두 입력을 모두 읽고, 쉼표로 구분된 제품 이름들을 배열로 변환한 다음, 각 제품 이름에 "Category: ProductName" 형식으로 카테고리 접두사를 추가하는 콜백 함수를 만드세요. array_walk()를 콜백 함수와 함께 사용하여 원본 배열을 직접 수정하고, 수정된 각 제품 이름을 별도의 줄에 출력하세요.
콜백 함수는 배열 요소를 참조로 수정하기 위해 &$value 매개변수를 사용해야 합니다. 함수는 카테고리 접두사 뒤에 콜론과 공백을 붙이고, 그 뒤에 제품 이름을 연결해야 합니다.
입력 형식:
- 첫 번째 줄: 쉼표로 구분된 제품 이름 (예:
laptop,mouse,keyboard,monitor) - 두 번째 줄: 카테고리 접두사 텍스트 (예:
Electronics)
예상 출력: 수정된 각 제품 이름이 Category: ProductName 형식으로 별도의 줄에 출력됩니다.
직접 해보기
<?php
// 쉼표로 구분된 제품 이름들을 읽습니다
$products_input = trim(fgets(STDIN));
// 카테고리 접두사를 읽습니다
$category = trim(fgets(STDIN));
// 쉼표로 구분된 문자열을 배열로 변환합니다
$products = explode(',', $products_input);
// TODO: 아래에 코드를 작성하세요
// 각 제품 이름에 카테고리 접두사를 추가하여 수정하는 콜백 함수를 생성합니다
// 배열을 수정하기 위해 콜백 함수와 함께 array_walk()를 사용합니다
// 수정된 각 제품 이름을 별도의 줄에 출력합니다
foreach ($products as $product) {
echo $product . "\n";
}
?>이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.