11

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

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

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

在 PHP 中,我将如何执行以下操作?

names **.Where** (x => x.Equals("Ronald")) **.FirstOrDefault()**;
4

2 回答 2

29

有一些 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();
于 2013-08-16T13:52:42.730 回答
3

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

  1. 调用的顺序是固定的(结果可能不是你所期望的)。
  2. 这并不是真正的懒惰。

PHPLinq 的优势在于它是唯一支持数据库的 PHP LINQ 实现。它不再是唯一的,TimeToogo 的 PINQ 也支持数据库,但在撰写本文时,PINQ 唯一的 LINQ 提供程序是 MySQL demo。

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

使用 YaLinqo 的示例:

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

* YaLinqo 是我开发的。

于 2014-07-16T16:29:36.503 回答