재귀를 사용하여 PHP에서 배열 반전

8675 단어 webdevphptutorial
컴퓨터 과학 교과서 주제로 돌아가 봅시다. array_xxx()와 같은 기본 배열 함수를 사용하지 않고 PHP에서 배열을 뒤집는 방법을 보여줍니다.

재귀



재귀는 함수 자체를 호출하는 컴퓨터 과학의 프로세스입니다. 해당 함수를 재귀 함수라고 합니다. 특정 복잡한 문제는 재귀 방법을 사용하여 쉽게 해결할 수 있습니다.

재귀 함수를 이해하는 가장 좋은 방법은 피보나치 수열의 예를 보여주는 것입니다. 피보나치 수는 다음과 같이 정의할 수 있습니다.

F(0) = 0, F(1) = 1
F(N) = F(N-1) + F(N-2) (N > 1)


피보나치 숫자에 대한 재귀 함수는 다음과 같습니다.

function F(int $n): int {
    if ($n == 0) return 0; // Stop condition
    if ($n == 1) return 1; // Stop condition

    return F($n - 1) + F($n - 2);

}

 echo 'F(18) = ' . F(18); // F(18) = 2584


재귀 함수에서 가장 중요한 것은 함수가 자신을 호출하는 것을 중지하는 중지 조건입니다. 위의 코드 스니펫에는 두 가지 중지 조건이 있습니다.

if ($n == 0) return 0;


그리고

if ($n == 1) return 1;


이러한 정지 조건은 F(0) = 0F(1) = 1 의 경우입니다. N > 1 인 경우 재귀 함수는 자신을 호출하고 F($n - 1) + F($n - 2) 값을 반환합니다. 중지 조건이 정의되지 않은 경우 재귀 함수는 무한 재귀 문제에 빠질 수 있습니다. 이것은 무한 루프의 경우와 같습니다.

배열 반전



이것은 PHP에서 array_xxx()와 같은 네이티브 배열 함수를 사용하지 않고 재귀를 사용하여 배열을 뒤집는 예입니다.

배열을 뒤집기 위해 reverseArray(array $array)라는 재귀 함수를 정의합니다. 입력 배열을 반복하고 입력 배열에서 읽은 각 요소가 반환 배열insertToFront()의 앞에 배치되는 함수$result를 호출하여 각 요소의 위치를 ​​반대로 바꿉니다.

function reverseArray(array $array) {
    $result = [];
    foreach ($array as $key => $value) {
        // check if it is an array
        if (is_array($value)) {
            // insert into the front of the result array
            $result =  insertToFront($key, reverseArray($value), $result);
            continue;
        }      
        $result = insertToFront($key, $value, $result);  
    }
    return $result;

} 


재귀 함수reverseArray(array $array)에서 중지 조건은 요소의 값 유형이 배열이 아닌 경우입니다. 각 반복 배열 요소는 차례로 반환 배열$result의 앞에 배치됩니다.

$result = insertToFront($key, $value, $result);


요소의 값 유형이 배열이면 재귀 함수가 호출되어 이 배열을 뒤집습니다.

$result =  insertToFront($key, reverseArray($value), $result);


반환 배열의 앞에 배열 요소를 배치하는 과정은 다음과 같습니다.

function insertToFront($key, $value, $array) {

    $result = [];
    // insert into the front of the result array 
    $result[$key] = $value;

    // append all the rest data
    foreach ($array as $oldKey => $oldValue) {
        $result[$oldKey] = $oldValue;
    }       

   return $result;
}


재귀 함수reverseArray(array $array)를 테스트하려면 먼저 인덱스 배열로 테스트해 보겠습니다.

// Indexed array
$inputArray = [1, 2, 3, 4, 5]; 

echo 'Before Reverse:' . PHP_EOL;
var_dump($inputArray);
echo 'After Reverse:' . PHP_EOL;
var_dump(reverseArray($inputArray)); 


...

나머지 내용은 아래 링크를 참조하세요.
https://www.codebilby.com/blog/a41-reverse-an-array-in-php-by-using-recursion

좋은 웹페이지 즐겨찾기