'array_walk'로 배열 순회하기
Coddy PHP 여정의 논리 & 흐름 섹션에 포함된 레슨. 68개 중 44번째.
array_walk() function은 array_map()과 비교하여 array를 처리하는 다른 접근 방식을 제공합니다. array_map()이 변환된 값으로 새로운 array를 생성하는 반면, array_walk()은 callback function을 각 요소에 제자리에서 적용하여 원래 array를 직접 modifies합니다.
이 function은 복사본을 만들지 않고 기존 array를 변경하려는 경우에 특히 유용합니다. 사용자가 제공하는 callback function은 각 array 요소를 참조로 받아 원래 값을 직접 modify할 수 있습니다.
<?php
function addPrefix(&$value, $key) {
$value = "Item: " . $value;
}
$items = ["apple", "banana", "orange"];
array_walk($items, "addPrefix");
// $items는 이제: ["Item: apple", "Item: banana", "Item: orange"]
?>&$value를 사용하여 array 요소를 참조로 받는 callback function에 주목하세요. 이를 통해 function이 원래 array 요소를 직접 modify할 수 있습니다. 두 번째 매개변수 $key는 현재 요소의 key에 액세스할 수 있게 해 주지만, 간단한 변환에서는 항상 필요한 것은 아닙니다.
array_walk()는 callback function에 extra data를 직접 전달할 수 있도록 해 주는 optional third argument도 지원합니다. 이는 변환이 array 외부에서 정의된 값(예: prefix, suffix 또는 기타 동적 입력)에 따라 달라질 때 유용합니다.
array_walk()에 third argument를 전달하면 callback function이 이를 third parameter로 받습니다:
<?php
function addCategory(&$value, $key, $category) {
$value = $category . ": " . $value;
}
$products = ["laptop", "mouse", "keyboard"];
$prefix = "Electronics";
array_walk($products, "addCategory", $prefix);
// $products is now: ["Electronics: laptop", "Electronics: mouse", "Electronics: keyboard"]
?>여기서 $prefix는 세 번째 argument로 array_walk()에 전달되고, callback은 이를 $category로 받습니다. 이렇게 하면 callback function 내부에 어떤 값도 하드코딩하지 않고, 서로 다른 prefix와 함께 동일한 callback function을 재사용할 수 있습니다.
챌린지
쉬움두 개의 입력을 받습니다. 하나는 쉼표로 구분된 product names 목록이고, 다른 하나는 category prefix입니다. 첫 번째 입력에는 laptop,mouse,keyboard,monitor 형식의 product names가 string으로 포함되며, 두 번째 입력은 category prefix 텍스트입니다(예: Electronics).
두 입력을 Read하고, 쉼표로 구분된 product names를 array로 Convert한 다음, 각 product name에 category prefix를 "Category: ProductName" 형식으로 추가하는 callback function을 Create합니다. 그런 다음 array_walk()를 callback function과 함께 Using하여 원래 array를 직접 modify하고, 각 modified product name을 separate line에 출력합니다.
callback function은 &$value argument를 사용하여 array elements를 참조로 modify해야 합니다. function은 category prefix를 콜론과 공백에 이어 product name과 연결해야 합니다.
Input format:
- First line: 쉼표로 separated된 product names(예:
laptop,mouse,keyboard,monitor) - Second line: category prefix 텍스트(예:
Electronics)
Expected output: 각 modified product name이 Category: ProductName 형식으로 separate line에 출력됩니다.
직접 해보기
<?php
// 쉼표로 구분된 제품 이름을 읽습니다
$products_input = trim(fgets(STDIN));
// 카테고리 접두사를 읽습니다
$category = trim(fgets(STDIN));
// 쉼표로 구분된 문자열을 배열로 변환합니다
$products = explode(',', $products_input);
// TODO: 아래에 코드를 작성하세요
// 카테고리 접두사를 추가하여 각 제품 이름을 수정하는 콜백 함수를 만듭니다
// array_walk()를 콜백 함수와 함께 사용하여 배열을 수정합니다
// 수정된 각 제품 이름을 별도의 줄에 출력합니다
foreach ($products as $product) {
echo $product . "\n";
}
?>이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리 & 흐름의 모든 레슨
직접 연습해 보세요: 온라인 PHP 컴파일러