霜之刃/functional

链式功能方法。

安装数: 9,282

依赖者: 0

建议者: 0

安全: 0

类型:

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

README

链式功能方法

why functional

安装

composer require frostbane/functional

简单示例

$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'