关于什么是 LinQ 相信经历过使用 C# 或 NodeJs 语言的朋友都已经体会到它在处理数据集合方面的强大,没有经历过的可以网上搜索一下,有大部分相关的信息。而最近我在写 PHP 项目的时候遇到了较多的数据集合的处理,就联想到 PHP 也是主流语言,也应该会有 LinQ 的存在吧,于是呼在 GITHUB 上寻找,在 GITHUB 有关资源也很多,但从使用过来看还是或多或少有些差距,很多是不稳定(包括对新的 PHP 7)似乎作者们也没有持续的更新。
唯一使用感觉比较好的是这个资源【linq/php-linq】,这个是在谷歌上搜索到的。
项目地址:https://packagist.org/packages/linq/php-linq
GITHUB:github.com/gallas12/php-linq
至于它这个东西如何使用,其实作者也写得比较清楚了。在这也写几个要点。
要在类中使用 WHERE 动态查询 ,比较在类的属性声明这个查询。例如:
class T { private $age = array('age'=>23); public function main() { $students = array( array("name" => "Milan", "surname" => "Gallas", "age" => 20, "Job" => "php Programátor"), array("name" => "Amdrea", "surname" => "Novotná", "age" => 17, "Job" => "java Programátor"), array("name" => "Honza", "surname" => "Pulkert", "age" => 27, "Job" => "c# Programátor"), array("name" => "Nikola", "surname" => "Světnická", "age" => 23, "Job" => "php Programátor"), array("name" => "Nikola", "surname" => "Světnická", "age" => 23, "Job" => "php Programátor"), array("name" => "Petr", "surname" => "Grůdl", "age" => 31, "Job" => "java Programátor"), ); $linq = LinqFactory::createLinq(); $rxs = $linq->from($students) ->where(function($item){ if($item["age"] > $this->age['age']) return $item; }) ->select(); // foreach ($rxs as $rx) { // echo "\r\n".$rx; // } print_r(jsonEnCode($rxs)); } }
这点是作者在文章中没有提到的,也是自己琢磨了很久才琢磨出来的。
2018年08月11日记:接触了 linq 之后发现还有一个与 linq 非常搭配的表达式 —— lambdas ,它们两个的组合完全简化了上面用类属性的例子。
$students = array( array("name" => "Milan", "surname" => "Gallas", "age" => 20, "Job" => "php Programátor"), array("name" => "Amdrea", "surname" => "Novotná", "age" => 17, "Job" => "java Programátor"), array("name" => "Honza", "surname" => "Pulkert", "age" => 27, "Job" => "c# Programátor"), array("name" => "Nikola", "surname" => "Světnická", "age" => 23, "Job" => "php Programátor"), array("name" => "Nikola", "surname" => "Světnická", "age" => 23, "Job" => "php Programátor"), array("name" => "Petr", "surname" => "Grůdl", "age" => 31, "Job" => "java Programátor"), ); $linq = LinqFactory::createLinq(); $isAge = 23; $rxs = $linq->from($students) ->where(function ($item) use ($isAge) { if ($item["age"] > $isAge) return $item; }) ->select(); print_r(jsonEnCode($rxs));
看是不是!!!
转载请注明:隨習筆記 » PHP 笔记:PHP版的LinQ