다차원 배열에서 첫 번째 일치 키 값 검색: 재귀 문제 해결
소프트웨어 개발에서 다차원 배열 탐색 및 검색 특정 키는 일반적인 작업입니다. 그러나 재귀가 관련되면 상황이 까다로워질 수 있습니다. 일치하는 키와 연관된 값을 찾는 것을 목표로 하는 다음 코드 조각을 분석해 보겠습니다.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!