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

PHP에서 다차원 배열의 키 값을 효율적으로 검색하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-31 00:07:29728검색

How to Efficiently Search for Key Values in Multidimensional Arrays in PHP?

일치하는 키 값을 찾기 위해 다차원 배열 검색

특정 키와 해당 값을 검색하기 위해 다차원 배열을 순회할 때 흔히 발생하는 문제는 다음과 같습니다. 재귀 문제. 다음 샘플 방법을 고려해 보세요.

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

이 방법은 연관 배열 내에서 키를 찾고 연관된 값을 반환하는 것을 목표로 합니다. 그러나 재귀 접근 방식에는 잠재적인 문제가 있습니다.

이 문제를 해결하려면 PHP의 새로운 기능을 사용하여 보다 현대적이고 효율적인 솔루션을 사용할 수 있습니다.

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

이 방법은 재귀 및 반복자를 활용합니다. 배열을 효율적으로 탐색하고 일치하는 첫 번째 키를 찾으려면.

또는 첫 번째 일치 항목이 아닌 모든 일치 항목을 반복하려는 경우 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;
        }
    }
}

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

이 접근 방식을 사용하면 배열에서 일치하는 모든 값을 우아하게 반복할 수 있습니다.

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

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