>  기사  >  백엔드 개발  >  PHP에서 다차원 배열의 키를 재귀적으로 검색하는 방법은 무엇입니까?

PHP에서 다차원 배열의 키를 재귀적으로 검색하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-02 15:58:30810검색

How to Recursively Search for a Key in a Multidimensional Array in PHP?

다차원 배열에서 키를 재귀적으로 검색

문제:

제공된 find() 메소드는 재귀적으로 키를 검색하려고 합니다. 연관 배열에서 특정 키를 검색하고 연관된 값을 반환합니다. 그러나 재귀 구현에 문제가 있습니다.

해결 방법:

원본 코드의 문제는 재귀와 관련이 있습니다. 현재 수준에서 일치하는 항목이 없는 경우를 처리하지 않고 직접 재귀 호출의 출력을 반환하려고 시도합니다. 이로 인해 배열의 더 깊은 일치 항목이 존재하는지 여부에 관계없이 "찾지 못함"이라는 잘못된 반환 값이 발생할 수 있습니다.

이를 수정하려면 다음 코드를 사용하여 재귀를 올바르게 처리할 수 있습니다.

<code class="php">private function find($needle, $haystack) {
    foreach ($haystack as $name => $file) {
        if ($needle == $name) {
            return $file;
        } else if(is_array($file)) { //is folder
            $result = $this->find($needle, $file); //file is the new haystack
            if ($result !== "did not find") {
                return $result;
            }
        }               
    }
    
    return "did not find";
}</code>

이 업데이트된 함수는 재귀 호출 결과가 더 깊은 수준에서 일치 항목을 찾았음을 나타내는 "찾지 못함"이 아닌지 확인합니다. 이 경우 찾은 값을 반환합니다. 그렇지 않으면 이전과 같이 "찾지 못함" 값을 반환합니다.

대체 솔루션:

최신 PHP 버전(5.6 이상)에서는 반복자와 /또는 생성기가 더 효율적이고 우아할 수 있습니다.

<code class="php">function recursiveFind(array $haystack, $needle)
{
    $iterator  = new RecursiveArrayIterator($haystack);
    $recursive = new RecursiveIteratorIterator(
        $iterator,
        RecursiveIteratorIterator::SELF_FIRST
    );
    foreach ($recursive as $key => $value) {
        if ($key === $needle) {
            return $value;
        }
    }
}</code>

이 함수는 반복자를 사용하여 다차원 배열을 효율적으로 탐색하고 첫 번째로 일치하는 키를 찾습니다.

또한 생성기를 사용하여 반복할 수 있습니다. 첫 번째 요소뿐만 아니라 일치하는 모든 요소에 대해:

<code class="php">function recursiveFind(array $haystack, $needle)
{
    $iterator  = new RecursiveArrayIterator($haystack);
    $recursive = new RecursiveIteratorIterator(
        $iterator,
        RecursiveIteratorIterator::SELF_FIRST
    );
    foreach ($recursive as $key => $value) {
        if ($key === $needle) {
            yield $value;
        }
    }
}

// Usage
foreach (recursiveFind($haystack, $needle) as $value) {
    // Use `$value` here
}</code>

위 내용은 PHP에서 다차원 배열의 키를 재귀적으로 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.