PHP의 foreach 루프에서 배열의 값을 직접 접근하고 수정하려면 참조(reference) 연산자인 &를 사용하면 됩니다. 참조를 활용하면 루프 내부에서 배열의 원본 값을 변경할 수 있으며, 이를 새로운 배열에 담아 반환하는 것도 가능합니다.
기본 문법
foreach에서 배열 값을 참조로 가져오는 기본 문법은 다음과 같습니다.
foreach ($yourArrayName as &$anyVariableName)
여기서 변수 이름 앞에 붙은 &가 핵심입니다. 이 기호가 없으면 루프 안에서 값을 변경해도 원본 배열에는 아무런 영향을 주지 못합니다.
예제 소개
예를 들어 다음과 같은 숫자 배열이 있다고 가정해 보겠습니다.
$values = array(35, 50, 100, 75);
이제 아래 PHP 코드를 사용하여 배열의 각 값에 5를 곱한 결과를 새 배열에 저장한 뒤 반환해 보겠습니다.
코드 예제
<!DOCTYPE html>
<html>
<body>
<?php
$values = array(35, 50, 100, 75);
function getValues($values) {
$allValues = [];
$counter = 0;
// &(참조)를 사용해 각 요소에 직접 접근
foreach ($values as &$tempValue) {
$tempValue = $tempValue * 5; // 값에 5를 곱함
$allValues[$counter] = $tempValue; // 결과를 새 배열에 저장
$counter++;
}
return $allValues; // 처리된 배열 반환
}
$result = getValues($values);
for ($i = 0; $i < count($result); $i++) {
echo $result[$i], "<br>";
}
?>
</body>
</html>실행 결과
위 코드를 실행하면 배열의 각 요소가 5배가 되어 다음과 같이 출력됩니다.
175 250 500 375
핵심 정리
foreach ($array as &$value)처럼 변수 앞에&를 붙이면 배열 요소에 대한 참조가 전달됩니다.- 참조를 통해 루프 내부에서 계산한 결과를 원본 배열에 반영하거나, 별도의 배열에 담아 함수 외부로 반환할 수 있습니다.
- 참조를 사용한 후에는
unset($tempValue);로 참조를 해제하는 것이 좋습니다. 그렇지 않으면 이후 코드에서 의도치 않게 마지막 요소가 변경될 수 있습니다.