Сказ о том, как PHP на LINQ портировали. Сравнение ныне существующих библиотек с табличками, но без графиков — прилагается.
Картинка код для привлечения внимания (картинок не дождётесь!)
echo Phinq::create($people)
->groupBy(function($person) { return $person->residence->region; })
->select(function($grouping) {
$obj = new stdClass();
$obj->people = $grouping;
$obj->region = $grouping->getKey();
return $obj;
})->orderBy(function($obj) { return $obj->people->count(); }, true)
->aggregate(function($current, $next) {
$count = $next->people->count();
return $current . sprintf(
"%d %s (%s) live in the %s regionn",
$count,
$count === 1 ? 'person' : 'people',
$next->people->aggregate(function($current, $next) {
if ($current !== null) {
$current .= ', ';
}
return $current . sprintf('%s [%s]', $next->name, $next->residence->code);
}),
$next->region
);
});
Кто видел C# или любой функциональный язык — при виде этого шедевра закатит глаза (если они предварительно не вылетят из орбит). И, наверное, будет прав. Но можно ещё вот так:
$lowNums =
from('$n')->in($numbers)->
where('$n < 5')->
store($digits)->into('digits')->
select('$digits[$n]');