/ Gists / PHP - Yield
On gists

PHP - Yield

PHP

example.php Raw #

<?php

function generatorFunction() {
    yield 1;
    yield 2;
    yield 3;
}

// Použití generátoru
$generator = generatorFunction();

foreach ($generator as $value) {
    echo $value . ' ';
}

// Výstup: 1 2 3


/* -----------------------------  */


names.txt 
===
John Doe
Jane Smith
Bob Johnson
Alice Williams
... (a mnoho dalších jmen)



function readNamesFromFile($filename) {
    $file = fopen($filename, 'r');
    if (!$file) {
        throw new Exception("Nepodařilo se otevřít soubor.");
    }

    while (($line = fgets($file)) !== false) {
        yield trim($line);
    }

    fclose($file);
}

// Použití generátoru pro zpracování jmen ze souboru
$generator = readNamesFromFile('names.txt');

foreach ($generator as $name) {
    // Provádění operace s každým jménem
    echo "Hello, $name!" . PHP_EOL;
}


/* -----------------------------  */


function randomDataGenerator($count) {
    for ($i = 0; $i < $count; $i++) {
        yield rand(1, 100); // Generujeme náhodné číslo v rozmezí 1 až 100
    }
}

// Generujeme 10 náhodných čísel
$generator = randomDataGenerator(10);

foreach ($generator as $number) {
    // Provádění operace s každým náhodným číslem
    echo $number . ' ';
}


/* -----------------------------  */


function searchValueInArray(array $array, $value) {
    foreach ($array as $item) {
        if (in_array($value, $item)) {
            yield $item;
        }
    }
}

// Příklad použití:

$data = array(
    array('id' => 1, 'name' => 'John'),
    array('id' => 2, 'name' => 'Jane'),
    array('id' => 3, 'name' => 'Bob'),
    array('id' => 4, 'name' => 'Alice')
);

$searchValue = 'Bob';

foreach (searchValueInArray($data, $searchValue) as $result) {
    echo "Hodnota nalezena: " . $result['name'] . "\n";
}

return-vs-yield.php Raw #

<?php
class Team
{
    private $index = 0;
    private $teams = [];
    
    public function add($team)
    {
        $this->teams[] = $team;
    }

    public function getTeam()
    {
       return $this->teams[$this->index++] ?? null;
     }
}


$team = new Team;
$team->add('T1');
$team->add('T2');
$team->add('T3');
$team->add('T4');
$team->add('T5');
$team->add('T6');
$team->add('T7');
$team->add('T8');
$team->add('T9');
$team->add('T10');

while (($teamName = $team->getTeam())) {
    echo $teamName . "<br />";
}


echo "<hr />";


/*

-------------------------

*/


class Team2
{
    private $index = 0;
    private $teams = [];

    public function add($team)
    {
        $this->teams[] = $team;
    }

    public function getTeams()
    {
        foreach ($this->teams as $index => $t) {
            yield $t;
        }
    }
}

$team = new Team2;
$team->add('T1');
$team->add('T2');
$team->add('T3');
$team->add('T4');
$team->add('T5');
$team->add('T6');
$team->add('T7');
$team->add('T8');
$team->add('T9');
$team->add('T10');

$teamGenerator = $team->getTeams();

$teamName = $teamGenerator->current();
echo $teamName . "<br />";
$teamGenerator->next();

$teamName = $teamGenerator->current();
echo $teamName . "<br />";
$teamGenerator->next();