是否有筛选数组的查询语言?

时间:2014-02-17 16:10:12

标签: php sql

我想知道是否有一个库实现类似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以及我可以在现场组合的相似实现。我正在寻找类似接口的查询来访问数据。

3 个答案:

答案 0 :(得分:2)

您可以使用LINQ,使用PHP实现,例如phpLinqLINQ for PHPplinq

答案 1 :(得分:0)

我发现以下是所有可用选择中最接近的:

https://github.com/braincrafted/arrayquery

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();

在相关的说明中,Mongo PHP扩展为Mongo API翻译http://www.php.net/manual/en/mongo.sqltomongo.php提供了SQL。基本逻辑可以作为指导开发SQL接口到PHP数组的人的指导性示例。

答案 2 :(得分:0)

我认为PHP中数组没有任何主动使用的类SQL查询语言的原因是性能。使用类似ArrayQuery(我是其作者)之类的东西已经导致性能损失。查询语言会导致性能进一步下降,这使得大部分时间都没有意义。

ArrayQuery也受Doctrines QueryBuilder的启发,这是一种基于对象的方法将SQL转换为系统,这种对象在PHP等OOP语言中更为自然。