Wyszukiwanie wartości w tablicach asocjacyjnych z użyciem generatorów (wyszukiwanie leniwe)
Założenie: Chcemy efektywnie wyszukać wartość w bardzo dużej tablicy asocjacyjnej, unikając jednoczesnego przetwarzania wszystkich danych.
Krok po kroku:
- Stworzenie dużej tablicy asocjacyjnej: Zdefiniujmy przykładową tablicę reprezentującą konfigurację systemu.
- Funkcja generatora do wyszukiwania: Napiszmy funkcję, która będzie generować wyniki tylko wtedy, gdy znajdzie pasujące elementy.
- Użycie generatora: Wykorzystajmy generator do wyszukiwania użytkowników o roli “admin”.
- Wyjaśnienie: Generator `findUsersByRole` zwraca tylko te elementy, które spełniają warunek. Nie przetwarza całej tablicy naraz, co jest bardzo efektywne dla dużych zbiorów danych.
$config = [
'user1' => ['name' => 'Jan Kowalski', 'role' => 'admin'],
'user2' => ['name' => 'Anna Nowak', 'role' => 'user'],
'user3' => ['name' => 'Piotr Wiśniewski', 'role' => 'admin'],
// ... wiele innych użytkowników ...
'user1000' => ['name' => 'Zofia Zielińska', 'role' => 'user']
];
function findUsersByRole(array $config, string $role): Generator
{
foreach ($config as $userId => $userData) {
if ($userData['role'] === $role) {
yield $userId => $userData;
}
}
}
foreach (findUsersByRole($config, 'admin') as $userId => $userData) {
echo "Użytkownik ID: " . $userId . ", Imię: " . $userData['name'] . "\n";
}
Ten przykład pokazuje podstawy wykorzystania generatorów w PHP do efektywnego wyszukiwania w dużych tablicach asocjacyjnych. Zachęcamy do dalszego zgłębiania tematu generatorów i ich zastosowań w praktyce!