每天学习一点点,成功增加一大步

PHP 笔记:PHP版的LinQ

PHP zhanghui 193℃

关于什么是 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