Wyszukiwanie wartości w tablicach obiektów z użyciem generatorów (wyszukiwanie leniwe)
Założenie: Chcemy stworzyć funkcję, która efektywnie wyszukuje obiekt w dużej tablicy obiektów, unikając pełnego przeglądania całej tablicy, jeśli znaleziono szukany element.
Krok po kroku:
- Definicja klasy produktu: Stwórzmy klasę reprezentującą produkt.
- Utworzenie tablicy produktów: Utwórzmy przykładową tablicę obiektów klasy
Product
. - Funkcja wyszukiwania z generatorem: Napiszmy funkcję, która używa generatora do leniwego wyszukiwania.
- Użycie funkcji: Wykorzystajmy funkcję do znalezienia produktu o ID 3.
class Product {
public $id;
public $name;
public function __construct($id, $name) {
$this->id = $id;
$this->name = $name;
}
}
$products = [
new Product(1, 'Produkt A'),
new Product(2, 'Produkt B'),
new Product(3, 'Produkt C'),
new Product(4, 'Produkt D'),
// ... wiele innych produktów
];
function findProductById(array $products, int $id): ?Product {
foreach ($products as $product) {
if ($product->id === $id) {
yield $product; // Zwracamy produkt i przerywamy iterację
return;
}
}
yield null; // Zwracamy null, jeśli produkt nie został znaleziony
}
$foundProduct = findProductById($products, 3);
foreach ($foundProduct as $product) {
if ($product !== null) {
echo "Znaleziono produkt: " . $product->name;
} else {
echo "Produkt nie znaleziony";
}
}
Powyższy przykład pokazuje, jak generator pozwala na efektywne wyszukiwanie w dużych zbiorach danych. Funkcja findProductById
przerywa iterację po znalezieniu produktu, co znacznie przyspiesza proces, szczególnie w przypadku bardzo dużych tablic.
Ten przykład prezentuje podstawy wykorzystania generatorów w PHP do efektywnego wyszukiwania. Zachęcamy do dalszego zgłębiania tematu i eksperymentowania z generatorami w różnych kontekstach!