- assert: documentation ( source)
- array_reduce: documentation ( source)
<?php
class Foo
{
private $a;
public function __construct($a)
{
$this->a = (int) $a;
}
public static function extractA(self $aFoo)
{
return $aFoo->a;
}
}
function max_by(array $aList, callable $aCallback)
{
return array_reduce($aList, function($carry, $item) use ($aCallback) {
return ($carry == null || $aCallback($item) > $aCallback($carry)) ? $item : $carry;
});
}
$list = [
$foo1 = new Foo(2),
$foo2 = new Foo(5),
$foo3 = new Foo(1),
];
assert(max_by($list, ['Foo', 'extractA']) === $foo2);