frostbane/functional

chain-able functional methods.

Installs: 9 282

Dependents: 0

Suggesters: 0

Security: 0

Type:package

v0.3.0b 2020-07-10 18:58 UTC

README

chain-able functional methods

why functional

Installation

composer require frostbane/functional

Simple Example

$logEntries = [
    [
        "id"      => 5,
        "name"    => "Dave",
        "date"    => date_create_from_format("Y/m/d", "2015/01/01"),
        "message" => "Yo",
    ],
    [
        "id"      => 2,
        "name"    => "John",
        "date"    => date_create_from_format("Y/m/d", "2018/12/18"),
        "message" => "Hi",
    ],
    [
        "id"      => 3,
        "name"    => "Ritchie",
        "date"    => date_create_from_format("Y/m/d", "2018/02/01"),
        "message" => "Hello",
    ],
    [
        "id"      => 1,
        "name"    => "Eric",
        "date"    => date_create_from_format("Y/m/d", "2017/05/28"),
        "message" => "What's up",
    ],
    [
        "id"      => 4,
        "name"    => "Lee",
        "date"    => date_create_from_format("Y/m/d", "2019/04/05"),
        "message" => "Uhmm",
    ],
];

$fnchain = new Functional($logEntries);
$date    = date_create_from_format("Y/m/d", "2018/12/01");

// $logEntries
//    -> filter only the users that logged in before $date
//    -> sort by id
//    -> get the user's greeting message
//    -> concatenate and add end of line to each message
$fnchain->filter(function ($entry) use ($date) {
            return $entry["date"] < $date;
        })
        ->usort(function ($left, $right) {
            return $left["id"] === $right["id"] ?
                0 :
                ($left["id"] < $right["id"] ?
                    -1 : 1);
        })
        ->map(function ($entry) {
            return "{$entry['name']} says '{$entry['message']}'";
        })
        ->reduce(function ($cur, $greeting) {
            return "$cur - $greeting\n";
        }, "");

$greetings = $fnchain->get_items();
//  - Eric says 'What's up'\n - Ritchie says 'Hello'\n - Dave says 'Yo\n'