On gists
Collection (filter, map, sort ... in one)
PHP Libs
PHP
Collection.php
Raw
#
<?php
/* https://betterprogramming.pub/how-to-make-your-php-code-beautiful-with-chainable-methods-83d8832b1b16 */
class Collection
{
private $array;
public function __construct($array)
{
$this->array = $array;
}
public function filter($callback)
{
$this->array = array_filter($this->array, $callback);
return $this;
}
public function map($callback)
{
$this->array = array_map($callback, $this->array);
return $this;
}
public function sort($callback)
{
usort($this->array, $callback);
return $this;
}
public function execute()
{
return $this->array;
}
}
$characters = new Collection([
'Maggie Simpson',
'Edna Krabappel',
'Marge Simpson',
'Lisa Simpson',
'Moe Szyslak',
'Waylon Smithers',
'Homer Simpson',
'Bart Simpson'
]);
$simpsons = $characters
->filter(function ($character) {
return preg_match('/^.+\sSimpson$/', $character);
})
->map(function ($character) {
return str_replace(' Simpson', '', $character);
})
->sort(function ($a, $b) {
return strcasecmp($a, $b);
})
->execute();
var_dump($simpsons); // ['Bart', 'Homer', 'Lisa', 'Maggie', 'Marge']