/** * @param \Dja\Db\Model\Query\BaseQuerySet $qs * @param int $chunkSize * @return \Iterator */ function chunkedIterator(\Dja\Db\Model\Query\BaseQuerySet $qs, $chunkSize = 1000) { $qs = clone $qs; $baseLimit = $qs->_qb()->getMaxResults(); $allCount = $qs->doCount(); $expectingResultsCount = $baseLimit !== null ? min($baseLimit, $allCount) : $allCount; $numIters = ceil($expectingResultsCount / $chunkSize); foreach (xrange(0, $numIters - 1) as $offsetMultiplier) { $offset = $offsetMultiplier * $chunkSize; $qs->_qb()->setFirstResult($offset)->setMaxResults($chunkSize); foreach ($qs as $key => $row) { (yield $key => $row); } } }
function testVariants($count) { testTraversable( "xrange ($count)", function() use($count) { return xrange(0, $count); } ); testTraversable( "RangeIterator ($count)", function() use($count) { return new RangeIterator(0, $count); } ); testTraversable( "urange ($count)", function() use($count) { return urange(0, $count); } ); testTraversable( "range ($count)", function() use($count) { return range(0, $count); } ); }
function xrange($start, $limit, $step = 1) { if ($start < $limit) { if ($step <= 0) { throw new LogicException('Step must be +ve'); } foreach (range($start, $limit, $step) as $i) { (yield $i); } } else { if ($step >= 0) { throw new LogicException('Step must be -ve'); } foreach (range($start, $limit, $step) as $i) { (yield $i); } } } /** 注意下面range()和xrange()输出的结果是一样的。 **/ echo 'Single digit odd numbers from range(): '; foreach (range(1, 9, 2) as $number) { echo "{$number} "; } echo "\n"; echo 'Single digit odd numbers from xrange(): '; foreach (xrange(1, 9, 2) as $number) { echo "{$number} "; } echo "\n";
use Ulrichsg\Getopt\Getopt; use Ulrichsg\Getopt\Option; require_once 'init.php'; // Set up our command line arguments. $playerOption = (new Option(null, 'playerId', Getopt::REQUIRED_ARGUMENT))->setDescription('The ID of the player to calculate for (required)')->setValidation($vNotBlank); $args = array_merge($DatabaseOptions, [$playerOption]); $options = new Getopt($args); // Parse the command-line arguments and connect to the database. try { $options->parse(); } catch (UnexpectedValueException $e) { echo $e->getMessage() . "\n"; echo $options->getHelpText() . "\n"; exit; } // Connect to the database. $pdo = connectToDatabase($options); // Prepare the SQL. The base SQL allows for a rolling mean to be created from // a hard-coded set of game numbers. Here we modify that SQL so that we can // loop over a set of game numbers and store rolling mean data for each game // number for each player. $sql = file_get_contents('hitter-rolling-mean.sql'); $sql = str_replace('FROM', ', :s1 AS start_game, :e1 AS end_game FROM ', $sql); $sql = str_replace('/* AND p.id = */', ' AND p.id=:pid ', $sql); $sql = str_replace('1 AND 10', ' :s2 AND :e2 ', $sql); $sql = 'INSERT INTO hitter_rolling_mean ' . $sql; $stmt = $pdo->prepare($sql); // Calculate the rolling mean in groups of 10 games. foreach (xrange(1, 152) as $startGameNumber) { $stmt->execute([':pid' => $options['playerId'], ':s1' => $startGameNumber, ':s2' => $startGameNumber, ':e1' => $startGameNumber + 10, ':e2' => $startGameNumber + 10]); }
<?php function xrange($start, $end, $step = 1) { for ($i = $start; $i <= $end; $i += $step) { (yield $i); } } $gen = xrange(1, 10); foreach ($gen as $num) { echo $num, "\n"; } function gen() { $ret = (yield 'yield1'); var_dump($ret . " | in gen()"); $ret = (yield 'yield2'); var_dump($ret . " | in gen()"); } $gen = gen(); var_dump($gen->rewind()); var_dump($gen->current()); // string(6) "yield1" var_dump($gen->send('ret1')); // string(4) "ret1" (the first var_dump in gen) // string(6) "yield2" (the var_dump of the ->send() return value) var_dump($gen->send('ret2')); class Task { protected $taskId; protected $coroutine;
<?php function xrange($start, $limit, $step = 1) { for ($i = $start; $i <= $limit; $i += $step) { yield $i; } } echo 'Single digit odd numbers: '; /* * Note that an array is never created or returned, * which saves memory. */ foreach (xrange(1, 210000, 3) as $number) { echo "$number "; } echo "echo \n"; for ($i = 1; $i <= 210000; $i++) { echo $i . ","; } echo "\n"; echo memory_get_usage(true) . PHP_EOL; ?>
<?php function xrange($start, $end, $step = 1) { for ($i = $start; $i <= $end; $i += $step) { (yield $i); } } foreach (xrange(10, 20, 2) as $i) { var_dump($i); }
if ($step <= 0) { throw new LogicException('Step must be +ve'); } for ($i = $start; $i <= $limit; $i += $step) { (yield $i); } } else { if ($step >= 0) { throw new LogicException('Step must be -ve'); } for ($i = $start; $i >= $limit; $i += $step) { (yield $i); } } } foreach (xrange(0, 10, 1) as $number) { echo $number . "<br/>"; } $gen = (function () { (yield 1); (yield 2); (yield 3); return 4; })(); //返回 123 foreach ($gen as $val) { echo $val, PHP_EOL; } //返回4 echo $gen->getReturn(), PHP_EOL; function gen()
<?php function xrange($start, $end, $step = 1) { for ($i = $start; $i < $end; $i += $step) { (yield $i); } } foreach (xrange(1, 10) as $num) { echo $num, "\n"; }
use App\Task; /** * Created by PhpStorm. * User: Jason * Date: 11/21/2015 * Time: 11:20 PM */ require_once "vendor/autoload.php"; function xrange($start, $end, $step = 1) { for ($i = $start; $i <= $end; $i += $step) { $ret = (yield $i); echo "i is {$i}, ret is {$ret} \n"; } } $range = xrange(1, 5); var_dump($range->rewind()); /*var_dump($range->current()); var_dump($range->next());*/ //var_dump($range->current()); var_dump($range->send("test")); var_dump($range->send("test2")); /*foreach ($range as $num) { echo $num, "\n"; }*/ //var_dump($range); // object(Generator)#1 //var_dump($range instanceof Iterator); // bool(true) echo "## Second Test \n"; function getTaskId() { return new SystemCall(function (Task $task, Scheduler $scheduler) {
function xrange($start, $limit, $step = 1) { if ($start < $limit) { if ($step <= 0) { throw new LogicException('step must be +ve'); } for ($i = $start; $i < $limit; $i += $step) { (yield $i); } } else { if ($step >= 0) { throw new LogicException('step must be +ve'); } for ($i = $start; $i >= $limit; $i += $step) { (yield $i); } } } //10000000 $xrange = xrange(1, 20, 2); print_r($xrange->key()); echo PHP_EOL; //echo 'Single digit odd numbers from xrange(): '; foreach ($xrange as $number) { echo "{$number} "; echo PHP_EOL; } //print_r($result); echo PHP_EOL; echo memory_get_usage(); echo PHP_EOL;