Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php LINQ表达式?_Php_Linq - Fatal编程技术网

Php LINQ表达式?

Php LINQ表达式?,php,linq,Php,Linq,有没有办法在PHP中使用LINQ表达式? 例如,在C#中,我可以执行以下操作: List<string> names = new List<string>() { "Francisco", "Ronald", "Araújo", "Barbosa" }; var oneName = names.Where(x => x.Equals("Ronald")).FirstOrDefault(); 有几个PHP库模仿LINQ的功能。例如:

有没有办法在PHP中使用LINQ表达式? 例如,在C#中,我可以执行以下操作:

List<string> names = new List<string>()
{
    "Francisco",
    "Ronald",
    "Araújo",
    "Barbosa"
};

var oneName = names.Where(x => x.Equals("Ronald")).FirstOrDefault();

有几个PHP库模仿LINQ的功能。例如:

在PHPLinq中,代码如下所示:

$names = array("Francisco", "Ronald", "Araújo", "Barbosa"); 
$oneName = from('$name')->in($names)
            ->where('$x => $x == "Ronald"')
            ->firstOrDefault('$name');
或者使用PINQ,它采用与PHP 5.3+闭包不同的方法:

$oneName = \Pinq\Traversable::from($names)
            ->where(function ($x) { return $x == 'Ronald'; })
            ->first();

我不推荐PHPLinq,因为它不是你在.NET中所习惯的,即使它看起来像LINQ。原因是:

  • 调用的顺序是固定的(结果可能不是您所期望的)
  • 这不是真正的懒惰
  • PHPLinq的优点是它是唯一一个支持数据库的PHP LINQ实现。它不再是唯一的,TimeToogo的PINQ也支持数据库,但在撰写本文时,PINQ的唯一LINQ提供程序是MySQL demo

    如果您只需要查询代码中的数组和对象,那么应该使用*。如果您需要对数据库的支持,唯一的选择是PHPLinq,但请注意它的局限性。我强烈建议使用流行的生产准备替代品,因为有足够的ORM、AR等

    使用YaLinqo的示例:

    $names = array("Francisco", "Ronald", "Araújo", "Barbosa"); 
    $oneName = from($names)->where('$x ==> $x == "Ronald"')->firstOrDefault();
    

    *YaLinqo是我开发的。

    你想使用还是?我想使用LINQ。可能吗?看看这个。谢谢你的提示。我想这就是我想要的。你能为YoLinqo添加对数据库的支持吗?@Pangamma它不在YaLinqo的范围之内。YaLinqo的首要任务是转换的速度、简单性和多样性,其中两个在DB层中不能很好地发挥作用(良好的LINQ到SQL转换非常复杂,DB功能限制了转换的数量),因此设计上严格要求LINQ到对象。TimeToogo的[Pinq](TimeToogo/Pinq),另一个LINQ端口,支持数据库,但其结果是,它要复杂得多,有限得多,而且速度要慢得多。它唯一的DB提供程序是MySQL的一个演示,所以我想DB功能还没有投入生产。@Pangamma在核心部分,有两个问题。首先,编写一个生成合理SQL的提供程序非常困难。其次,PHP不提供像C#那样的表达式支持,而且这种情况不会很快发生(我希望我们至少能看到lambdas)。考虑到这一点,LINQ到DB在不久的将来不会在PHP中出现,如果有的话。你应该寻找其他的解决方案,这很公平。当您不需要大量的开销时,简化是有价值的。
    $names = array("Francisco", "Ronald", "Araújo", "Barbosa"); 
    $oneName = from($names)->where('$x ==> $x == "Ronald"')->firstOrDefault();