2014-02-17 2 views
4

배열과 같은 데이터에 액세스하기위한 SQL과 같은 인터페이스를 구현하는 라이브러리가 있는지 궁금합니다.배열을 필터링 할 수있는 쿼리 언어가 있습니까?

입력 :

[ 
    ['name' => 'Tom', 'age' => 27, 'location' => ['country' => 'GB']], 
    ['name' => 'Jerry', 'age' => 16, 'location' => ['country' => 'LT']], 
    ['name' => 'Stuart', 'age' => 26, 'location' => ['country' => 'GB']] 
] 

소설 쿼리의 변형 생성 할 것이다

SELECT name, location.country FROM {input} WHERE age > 18 ORDER BY age DESC 

:

[ 
    ['name' => 'Tom', 'location.country' => 'GB'], 
    ['name' => 'Tom', 'location.country' => 'GB'] 
] 

주, 나는 array_filter와 비슷하게 구현을 완벽하게 알고 그 I 그 자리에서 함께 할 수 있습니다. 데이터에 액세스하기 위해 인터페이스와 같은 쿼리를 찾고 있습니다.

답변

2

당신은 내가 모든 가능한 대안의 가장 가까운 것으로 다음과 같은 발견 등 phpLinq 또는 LINQ for PHP 또는

+3

모든 단일 linq 라이브러리가 중단 된 것으로 보입니다. 나는 그것이 다른 이유로 유용하지 않다는 것을 증명했기 때문에 그 것이지 의심 스럽다. "linq"이름에서 찾은 가장 최신 구현은 https://github.com/Athari/YaLinqo입니다. 다른 하나는 내 대답에 언급 된 ArrayQuery입니다. – Gajus

0

plinq로 PHP 구현과, LINQ를 사용할 수 있습니다

ArrayQuery

https://github.com/braincrafted/arrayquery

쿼리를 제공하지 않습니다 언어, 쿼리 API를 제공하지는 않지만 관련 메모에

$thorinsCompany = [ 
    [ 'name' => 'Bilbo Baggins', 'race' => 'Hobbit' ], 
    [ 'name' => 'Gandalf', 'race' => 'Wizard' ], 
    [ 'name' => 'Thorin Oakenshild', 'race' => 'Dwarf' ], 
    [ 'name' => 'Balin', 'race' => 'Dwarf'], 
    [ 'name' => 'Bifur', 'race' => 'Dwarf'], 
    // ... 
]; 

$query->from($thorinsCompany); 
$query->where('race', 'Dwarf') 
$query->where('age', 50, '>'); 
$results = $query->findAll(); 

는 몽고 PHP 확장은 몽고의 API 번역, http://www.php.net/manual/en/mongo.sqltomongo.php에 SQL을 제공합니다. 기본 논리는 PHP 배열에 대한 SQL 인터페이스 개발에 발을 디딘 사람을위한 지침의 예로서 사용될 수 있습니다.

0

PHP에서 배열에 대해 활발하게 사용되는 SQL과 유사한 쿼리 언어가없는 이유는 성능이라고 생각합니다. ArrayQuery (필자는 저자)와 같은 것을 사용하면 성능이 저하 될 수 있습니다. 쿼리 언어를 사용하면 성능이 훨씬 저하되어 대부분의 경우 의미가 없습니다.

ArrayQuery도 Doctrines QueryBuilder에서 영감을 얻었습니다. 이는 PHP와 같은 OOP 언어에서 자연스러운 객체를 기반으로 SQL을 시스템으로 변환하는 방법입니다.

관련 문제