Wyszukiwanie wartości w tablicach zagnieżdżonych z użyciem generatorów (wyszukiwanie leniwe)

Założenie: Stworzyć funkcję, która efektywnie wyszukuje wartość w dużej, zagnieżdżonej tablicy, unikając jednoczesnego załadowania całej struktury do pamięci.

Krok po kroku:

  1. Definicja generatora: Stworzymy generator, który iteruje po tablicy zagnieżdżonej i zwraca kolejne elementy. Generator pozwala na przetwarzanie danych “na żądanie”, co jest kluczowe dla dużych zbiorów danych.
  2. 
    function recursiveSearch(array $array, $value): Generator
    {
        foreach ($array as $item) {
            if (is_array($item)) {
                yield from recursiveSearch($item, $value); // Rekurencyjne wywołanie dla podtablic
            } elseif ($item === $value) {
                yield $item; // Znaleziono wartość
            }
        }
    }
    				
  3. Użycie generatora: Wywołujemy generator i iterujemy po jego wynikach. Jeśli wartość zostanie znaleziona, pętla zostanie przerwana.
  4. 
    $nestedArray = [1, [2, [3, 4], 5], 6, [7, 8, [9, 10]]];
    $searchValue = 9;
    
    foreach (recursiveSearch($nestedArray, $searchValue) as $foundValue) {
        echo "Znaleziono wartość: " . $foundValue . "\n";
        break; // Przerwanie pętli po znalezieniu wartości
    }
    				
  5. Obsługa braku wartości: Możemy rozszerzyć funkcję o obsługę przypadku, gdy wartość nie zostanie znaleziona.
  6. 
    function recursiveSearch(array $array, $value): Generator
    {
        foreach ($array as $item) {
            if (is_array($item)) {
                yield from recursiveSearch($item, $value);
            } elseif ($item === $value) {
                yield $item;
                return; // Zakończenie generatora po znalezieniu wartości
            }
        }
        yield null; // Zwrócenie null, jeśli wartość nie została znaleziona
    }
    
    foreach (recursiveSearch($nestedArray, 11) as $foundValue) {
        if ($foundValue === null) {
            echo "Wartość nie została znaleziona.\n";
        } else {
            echo "Znaleziono wartość: " . $foundValue . "\n";
        }
        break;
    }
    				

Powyższy przykład demonstruje użycie generatorów do efektywnego wyszukiwania wartości w tablicach zagnieżdżonych. Generator pozwala na przetwarzanie danych “na żądanie”, co jest szczególnie ważne w przypadku bardzo dużych struktur danych, gdzie załadowanie całej tablicy do pamięci mogłoby być nieefektywne.

Zachęcamy do eksperymentowania z tym kodem i dalszego zgłębiania tematu generatorów w PHP!

Dodaj komentarz 0

Your email address will not be published. Required fields are marked *