Přečetl jsem si článek nazvaný "How to Read Big Files with PHP (Without Killing Your Server)", kde se píše, že yield se dá použit na streamování, aby funkce nežrali tolik paměti.
Mám takovýto kód:
$emails = file("adresy.txt");
foreach ($emails as $i => $em):
$em = emailReplace(strtolower(trim($em)));
$line = createLineWithTabs($i,$em,$psw1,$users_encoded_id_str_length);
$line = getLineWithTabs($line, $offset);
$indexes[$line] = $offset;
endforeach;
ksort($indexes);
Zajímá mě, jestli by se z toho kódu mezi file() a ksort() dala udělat funkce která bude yieldovat výstup do toho $indexes.
V ukázkovém ködu jsem totiž našel něco podobného:
$lines[] = trim(fgets($handle));
bylo nahrazeno za
yield trim(fgets($handle));
Takže bych chtěl udělat něco takového:
function yieldEmails(&$emails){...}
indexes = yieldEmails($emails);
A výsledkem by bylo to, že indexes bude obsahovat ty emaily namísto klíčů, a offsety namísto hodnot.
Dá se to udělat? A jestli jo, jak na to?
Pozn. Tato funkce je zatím jen dočasná a používám ji na provizorní sestavení souboru s uživatelskými emaily a hesly. Prostě to připravuje data abych mohl odladit zbytek programu, ale chtěl bych se to na tom naučit jestli to jde.