2013-08-16 8 views
11

Czy istnieje sposób na użycie wyrażeń LINQ w PHP? Na przykład, w języku C# I można wykonać następujące czynności:Wyrażenia LINQ?

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

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

I w PHP, jak mogłoby zrobić coś jak poniżej?

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

Czy chcesz użyć [wyrażeń lambda] (http://msdn.microsoft.com/en-us/library/vstudio/bb397687.aspx) lub [Linq] (http://msdn.microsoft.com /en-us/library/vstudio/bb397926.aspx)? – interlude

+0

Chcę użyć LINQ. Czy to możliwe? –

+1

http://phplinq.codeplex.com/ spójrz na to. – interlude

Odpowiedz

29

Istnieje kilka bibliotek PHP, które naśladują funkcjonalności LINQ. Przykładami są:

W PHPLinq kod wyglądałby następująco:

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

Or dowcip h PINQ która przyjmuje inne podejście z zamknięciami PHP 5.3+:

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

Nie polecam PHPLinq ponieważ nie jest to, co masz w zwyczaju w .NET, nawet jeśli wygląda LINQ. Powody są następujące:

  1. Kolejność połączeń jest ustalona (wynik może nie być zgodny z oczekiwaniami).
  2. To naprawdę nie jest leniwe.

Mocną stroną PHPLinq jest to, że jest to jedyna implementacja LINQ dla PHP, która obsługuje bazy danych. To już nie jedyny, PINQ TimeToogo obsługuje również bazy danych, ale w momencie pisania, jedynym dostawcą LINQ PINQ jest demo MySQL.

Jeśli potrzebujesz tylko zapytań o tablice i obiekty w kodzie, powinieneś użyć zamiast tego * YaLinqo. Jeśli potrzebujesz wsparcia dla baz danych, jedyną opcją jest PHPLinq, ale pamiętaj o jego ograniczeniach. Sugeruję za pomocą popularnych alternatyw produkcyjnych gotowy, nie jesteś wystarczająco ORMs, Ars itp

przykład stosując YaLinqo:

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

* YaLinqo jest rozwijany przez mnie.

+0

Czy możesz dodać obsługę baz danych do YoLinqo? – Pangamma

+1

@Pangamma To jest poza zasięgiem YaLinqo. Priorytety YaLinqo to szybkość, prostota i różnorodność transformacji, z których dwie nie grają dobrze z warstwą DB (dobra transformacja LINQ do SQL jest bardzo złożona, a funkcjonalność DB ogranicza liczbę transformacji), więc jest ściśle LINQ dla obiektów według projektu .TimeToogo [Pinq] (TimeToogo/Pinq), kolejny port LINQ, obsługuje bazy danych, ale w rezultacie jest znacznie bardziej złożony, bardziej ograniczony i znacznie wolniejszy. Jego jedyny dostawca DB jest demo dla MySQL, więc domyślam się, że funkcja DB nie jest gotowa do produkcji. – Athari

+0

@Pangamma W rdzeniu są dwa problemy. Po pierwsze, pisanie dostawcy generującego rozsądny SQL jest trudne, naprawdę trudne. Po drugie, PHP nie zapewnia obsługi ekspresji, takiej jak C#, i nie stanie się to w najbliższym czasie (mam nadzieję, że zobaczymy przynajmniej lambdy). Biorąc to pod uwagę, LINQ do DB nie stanie się w PHP w najbliższej przyszłości, jeśli w ogóle. Powinieneś poszukać alternatywnych rozwiązań. – Athari

Powiązane problemy