>  기사  >  백엔드 개발  >  재귀가 포함된 경우 다차원 배열에서 첫 번째로 일치하는 키의 값을 어떻게 찾을 수 있나요?

재귀가 포함된 경우 다차원 배열에서 첫 번째로 일치하는 키의 값을 어떻게 찾을 수 있나요?

Linda Hamilton
Linda Hamilton원래의
2024-10-30 11:43:27192검색

How can I find the value of the first matching key in a multidimensional array when recursion is involved?

다차원 배열에서 첫 번째 일치 키 값 검색: 재귀 문제 해결

소프트웨어 개발에서 다차원 배열 탐색 및 검색 특정 키는 일반적인 작업입니다. 그러나 재귀가 관련되면 상황이 까다로워질 수 있습니다. 일치하는 키와 연관된 값을 찾는 것을 목표로 하는 다음 코드 조각을 분석해 보겠습니다.

<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
            return $this->find($needle, $file); //file is the new haystack
        }               
    }
    
    return "did not find";
}</code>

문제는 재귀 자체에 있습니다. 건초 더미 내에서 배열을 만나면 파일 변수가 새로운 건초 더미가 됩니다. 그러나 원본 건초 더미에 대한 참조가 손실되어 잠재적으로 영원한 재귀 주기가 발생할 수 있습니다.

이 문제를 해결하려면 다음 해결 방법을 고려하세요.

RecursiveIteratorIterator

PHP 5.6 이상에서는 작업을 상당히 단순화하는 RecursiveIteratorIterator를 도입합니다.

<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>

이 접근 방식은 배열을 순회하는 RecursiveArrayIterator와 중첩 배열을 포함하여 모든 요소를 ​​효율적으로 반복하는 RecursiveIteratorIterator를 활용합니다.

생성기 기반 함수

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) {
            yield $value;
        }
    }
}</code>

이 함수는 다음을 반환합니다. Yield 키워드를 사용하여 값을 일치시키면 foreach 루프를 통해 모든 값을 반복할 수 있습니다.

위 내용은 재귀가 포함된 경우 다차원 배열에서 첫 번째로 일치하는 키의 값을 어떻게 찾을 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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