PHP에서의 재귀와 다차원 구조
임의의 깊이를 가진 다차원 배열이 주어졌을 때, 예를 들어 다음과 같은 배열이 있다고 가정해 봅시다:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
보시다시피, 이 배열은 복잡한 구조를 가지고 있으며, 이 구조는 임의적일 수 있고 중첩 수준은 무한히 깊을 수 있다고 가정합니다.
배열의 모든 기본(즉, 배열이 아닌) 요소를 화면에 출력하고 싶다고 가정해 보겠습니다. 이 경우, 배열의 구조가 불규칙하고 중첩 수준을 알 수 없기 때문에, 단순히 반복문을 사용하여 이 배열을 순회하는 것은 불가능합니다.
그러나, 이러한 배열을 순회하는 데에는 재귀를 사용하는 것이 매우 편리할 것입니다.
먼저, 매개변수로 배열을 받는 함수를 만들고, 함수 내에서 배열을 순회하기 위한 반복문을 작성해 보겠습니다:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
우리가 만든 반복문은 메인 배열의 요소만을
순회할 것입니다. 즉, 처음에는 1을 출력하고,
그 다음 [2, 7, 8]을,
마지막으로 [3, 4, [5, [6, 7]]을 출력합니다.
이제 반복문 내에서 기본 요소와 배열 요소를 구분해 보도록 하겠습니다:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// 요소 - 배열
} else {
// 요소 - 기본값
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
이제 요소가 배열인 경우, 함수가 그 배열을 매개변수로 전달하여 스스로를 호출하도록 만들어 보겠습니다:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
func($elem);
} else {
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
임의의 깊이를 가진 다차원 배열이 주어졌을 때, 예를 들어 다음과 같은 배열이 있다고 가정해 봅시다:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
재귀를 사용하여 이 배열의 모든 기본 요소를 화면에 출력하세요.