我想知道是否有一个库实现类似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
以及我可以在现场组合的相似实现。我正在寻找类似接口的查询来访问数据。
答案 0 :(得分:2)
您可以使用LINQ,使用PHP实现,例如phpLinq或LINQ for PHP或plinq
答案 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语言中更为自然。