Skip to content

isaeken/loops

Repository files navigation

Loops

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

Installation

You can install the package via composer:

composer require isaeken/loops

Usage

Basic Usage

loop(5, function (\IsaEken\Loops\Index $index) {
    return $index->odd;
}); // [false, true, false, true, false]

Async Usage

$loop = async_loop(5, function (\IsaEken\Loops\Index $index) {
    return $index->even;
});

// ...

await($loop); // [true, false, true, false, true]

Using with class method

$callback = new class implements \IsaEken\Loops\Contracts\LoopCallback {
    public function __invoke(Index $index, Loop $loop = null): int
    {
        return $index->index;
    }
};

$loop = new Loop(2, $callback);
$loop->run();
$loop->results(); // [0, 1]

Get current loop

loop(2 ,function (\IsaEken\Loops\Index $index, \IsaEken\Loops\Loop $loop) {
    return [
        'iteration' => $index->iteration,
        'index'     => $index->index,
        'remaining' => $index->remaining,
        'count'     => $index->count,
        'first'     => $index->first,
        'last'      => $index->last,
        'odd'       => $index->odd,
        'even'      => $index->even,
    ];
});
// [
//  [
//    'iteration' => 1,
//    'index' => 0,
//    'remaining' => 1,
//    'count' => 2,
//    'first' => true,
//    'last' => false,
//    'odd' => false,
//    'even' => true,
//  ],
//  [
//    'iteration' => 2,
//    'index' => 1,
//    'remaining' => 0,
//    'count' => 2,
//    'first' => false,
//    'last' => true,
//    'odd' => true,
//    'even' => false,
//  ]
// ]

Break the loop

loop(3, function (\IsaEken\Loops\Index $index, \IsaEken\Loops\Loop $loop) {
    if ($index->index > 1) {
        $loop->break();
    }
    
    return $index->index;
}); // [0, 1]

Loop random times

loop_random(function (\IsaEken\Loops\Index $index, \IsaEken\Loops\Loop $loop) {
    return $index->index;
}); // executed random times.

$min = 5;
$max = 10;

loop_random(function (\IsaEken\Loops\Index $index, \IsaEken\Loops\Loop $loop) {
    return $index->index;
}, $min, $max);

Loop random with seed

loop_random(function (\IsaEken\Loops\Index $index) {
    return $index->even;
}, seed: 123456789);

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

Credits

License

The MIT License (MIT). Please see License File for more information.