frostbane / functional
chain-able functional methods.
This package's canonical repository appears to be gone and the package has been frozen as a result.
v0.3.0b
2020-07-10 18:58 UTC
Requires
- php: >=7.1
Requires (Dev)
- phpunit/phpunit: 7.5.9
This package is auto-updated.
Last update: 2023-09-29 02:20:29 UTC
README
chain-able functional methods
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'