'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()는 선택적인 세 번째 인자도 허용합니다. 이 인자는 콜백의 세 번째 매개변수로 직접 전달되는 추가 데이터입니다. 이는 변환 작업이 배열 외부에서 정의된 값에 의존할 때 유용합니다.
<?php
function addPrefix(&$value, $key, $prefix) {
$value = $prefix . $value;
}
$items = ["apple", "banana", "orange"];
array_walk($items, "addPrefix", "Item: ");
// $items is now: ["Item: apple", "Item: banana", "Item: orange"]
?>여기서 문자열
"Item: "은 array_walk()의 세 번째 인자로 전달되며 콜백 내부에서 $prefix로 수신됩니다. 이를 통해 서로 다른 추가 값을 사용하여 동일한 콜백을 재사용할 수 있습니다.이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
챌린지
쉬움두 개의 입력을 받게 됩니다: 쉼표로 구분된 제품 이름 목록과 카테고리 접두사입니다. 첫 번째 입력은 laptop,mouse,keyboard,monitor와 같은 형식의 문자열로 된 제품 이름들이며, 두 번째 입력은 카테고리 접두사 텍스트(예: Electronics)입니다.
두 입력을 모두 읽고, 쉼표로 구분된 제품 이름들을 배열로 변환한 다음, 각 제품 이름에 "Category: ProductName" 형식으로 카테고리 접두사를 추가하는 콜백 함수를 만드세요. array_walk()를 콜백 함수와 함께 사용하여 원본 배열을 직접 수정하고, 수정된 각 제품 이름을 별도의 줄에 출력하세요.
콜백 함수는 참조에 의해 배열 요소를 수정하기 위해 &$value 매개변수를 사용해야 합니다. 함수는 카테고리 접두사를 콜론과 공백, 그리고 제품 이름과 연결해야 합니다.
입력 형식:
- 첫 번째 줄: 쉼표로 구분된 제품 이름 (예:
laptop,mouse,keyboard,monitor) - 두 번째 줄: 카테고리 접두사 텍스트 (예:
Electronics)
예상 출력: 수정된 각 제품 이름이 Category: ProductName 형식으로 별도의 줄에 출력됩니다.
치트 시트
array_walk() 함수는 새로운 배열을 생성하는 array_map()과 달리, 각 요소에 콜백 함수를 직접 적용하여 원본 배열을 수정합니다.
콜백 함수는 &$value를 사용하여 각 배열 요소를 참조(reference)로 전달받으므로, 원본 값을 직접 수정할 수 있습니다. 두 번째 파라미터인 $key는 현재 요소의 키에 대한 접근을 제공합니다.
array_walk()는 또한 선택적인 세 번째 인자를 허용합니다. 이 인자는 콜백 함수의 세 번째 파라미터로 전달되는 추가 데이터입니다. 이는 콜백 함수가 각 요소를 처리할 때 추가 정보가 필요한 경우 유용합니다.
<?php
function addPrefix(&$value, $key) {
$value = "Item: " . $value;
}
$items = ["apple", "banana", "orange"];
array_walk($items, "addPrefix");
// $items is now: ["Item: apple", "Item: banana", "Item: orange"]
// Using the optional third argument (extra data):
function applyPrefix(&$value, $key, $prefix) {
$value = $prefix . $value;
}
$fruits = ["apple", "banana", "orange"];
array_walk($fruits, "applyPrefix", "Fresh: ");
// $fruits is now: ["Fresh: apple", "Fresh: banana", "Fresh: orange"]
?>직접 해보기
<?php
// 쉼표로 구분된 제품 이름을 읽습니다.
$products_input = trim(fgets(STDIN));
// 카테고리 접두사를 읽습니다.
$category = trim(fgets(STDIN));
// 쉼표로 구분된 문자열을 배열로 변환합니다.
$products = explode(',', $products_input);
// TODO: 아래에 코드를 작성하세요
// 카테고리 접두사를 추가하여 각 제품 이름을 수정하는 콜백 함수를 만듭니다.
// 배열을 수정하기 위해 콜백 함수와 함께 array_walk()를 사용하세요.
// 수정된 각 제품 이름을 별도의 줄에 출력합니다.
foreach ($products as $product) {
echo $product . "\n";
}
?>이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.