array query
V 1.1.11
数组查询允许您对多维数组进行查询。
如果您需要在:
实例化查询器执行以下操作:
use ArrayQuery QueryBuilder ;
$ array = [
[
' id ' => 1 ,
' title ' => ' Leanne Graham ' ,
' email ' => ' [email protected] ' ,
' rate ' => 5 ,
' company ' => [
' name ' => ' Romaguera-Jacobson ' ,
' catchPhrase ' => ' Face to face bifurcated interface ' ,
' bs ' => ' e-enable strategic applications '
]
],
[
' id ' => 2 ,
' title ' => ' Ervin Howell ' ,
' email ' => ' [email protected] ' ,
' rate ' => 3 ,
' company ' => [
' name ' => ' Robel-Corkery ' ,
' catchPhrase ' => ' Multi-tiered zero tolerance productivity ' ,
' bs ' => ' transition cutting-edge web services '
]
],
[
' id ' => 3 ,
' title ' => ' Clementine Bauch ' ,
' email ' => ' [email protected] ' ,
' rate ' => 4 ,
' company ' => [
' name ' => ' Keebler LLC ' ,
' catchPhrase ' => ' User-centric fault-tolerant solution ' ,
' bs ' => ' revolutionize end-to-end systems '
]
],
// ..
]
QueryBuilder:: create ( $ array );
// to add an element to your array. Do this BEFORE make a query on the array
$ element = [
' id ' => 4 ,
' title ' => ' Patricia Lebsack ' ,
' email ' => ' [email protected] ' ,
' rate ' => 2 ,
' company ' => [
' name ' => ' Robel-Corkery ' ,
' catchPhrase ' => ' Multi-tiered zero tolerance productivity ' ,
' bs ' => ' transition cutting-edge web services '
]
];
$ qb -> addElement ( $ element , 4 );
// to remove an element from array by his key. Do this BEFORE make a query on the array
$ qb -> removeElement ( 3 );QueryBuilder检查您的数据一致性。如果检测到不一致,将提出一个NotConsistentDataException :
use ArrayQuery QueryBuilder ;
$ array = [
[
' id ' => 1 ,
' title ' => ' Leanne Graham ' ,
' email ' => ' [email protected] ' ,
' rate ' => 5 ,
' company ' => [
' name ' => ' Romaguera-Jacobson ' ,
' catchPhrase ' => ' Face to face bifurcated interface ' ,
' bs ' => ' e-enable strategic applications '
]
],
[
' id ' => 2 ,
' title ' => ' Ervin Howell ' ,
' email ' => ' [email protected] ' ,
' rate ' => 3 ,
' company ' => [
' name ' => ' Robel-Corkery ' ,
' catchPhrase ' => ' Multi-tiered zero tolerance productivity ' ,
' bs ' => ' transition cutting-edge web services '
]
],
[
' id ' => 3 ,
' title ' => ' Clementine Bauch ' ,
' email ' => ' [email protected] ' ,
' rate ' => 4 ,
' company ' => [
' name ' => ' Keebler LLC ' ,
' catchPhrase ' => ' User-centric fault-tolerant solution ' ,
' bs ' => ' revolutionize end-to-end systems '
],
' extra-field ' => ' this is an extra field '
],
]
// NotConsistentDataException will be raised
QueryBuilder:: create ( $ array );您可以在数组上执行查询。您可以连接标准:
use ArrayQuery QueryBuilder ;
// ..
$ qb = QueryBuilder:: create ( $ array );
$ qb
-> addCriterion ( ' title ' , ' Leanne ' , ' CONTAINS ' )
-> addCriterion ( ' rate ' , ' 3 ' , ' > ' )
-> sortedBy ( ' title ' , ' DESC ' );
// you can search by nested keys
$ qb -> addCriterion ( ' company.name ' , ' Romaguera-Jacobson ' );
// get results
foreach ( $ qb -> getResults () as $ element ){
// ...
}
// get first result
$ first = $ qb -> getFirstResult ();
// get last result
$ last = $ qb -> getLastResult ();
// get a result by index
$ thirdResult = $ qb -> getResult ( 3 );= (默认操作员,可以省略)><<=>=!=ARRAY_MATCHCONTAINS (病例不敏感)ENDS_WITHEQUALS_DATEGT_DATEGTE_DATEIN_ARRAYIN_ARRAY_INVERSEDLT_DATELTE_DATESTARTS_WITHASC (默认操作员,可以省略)DESCDATE_ASCDATE_DESC 您可以加入数组。请考虑此完整示例:
use ArrayQuery QueryBuilder ;
$ users = [
[
' id ' => 1 ,
' name ' => ' Mauro Cassani ' ,
' id_category ' => 3 ,
' email ' => ' [email protected] '
],[
' id ' => 2 ,
' name ' => ' Mario Rossi ' ,
' id_category ' => 3 ,
' email ' => ' [email protected] '
],[
' id ' => 3 ,
' name ' => ' Maria Bianchi ' ,
' id_category ' => 1 ,
' email ' => ' [email protected] '
]
];
$ category = [
' id ' => 3 ,
' name ' => ' Web Developer '
];
$ qb = QueryBuilder:: create ( $ users )
-> join ( $ category , ' category ' , ' id_category ' , ' id ' )
-> addCriterion ( ' category.id ' , 3 );
foreach ( $ qb -> getResults () as $ element ){
// ...
}您可以添加标准并为查询结果指定限制和偏移:
use ArrayQuery QueryBuilder ;
$ qb = QueryBuilder:: create ( $ array );
$ qb
-> addCriterion ( ' title ' , [ ' Leanne ' ], ' IN_ARRAY ' )
-> addCriterion ( ' rate ' , ' 3 ' , ' > ' )
-> sortedBy ( ' title ' )
-> limit ( 0 , 10 );
foreach ( $ qb -> getResults () as $ element ){
// ...
}您可以根据DateTime字段执行查询。您可以使用DATE_ASC或DATE_DESC操作员按日期对结果进行排序。如果您的格式不是YYYY-mm-dd则必须指定日期格式:
use ArrayQuery QueryBuilder ;
$ qb = QueryBuilder:: create ( $ array );
$ qb
-> addCriterion ( ' registration_date ' , ' 01/05/2017 ' , ' GT_DATE ' , ' d/m/Y ' )
-> addCriterion ( ' rate ' , ' 3 ' , ' > ' )
-> sortedBy ( ' registration_date ' , ' DATE_DESC ' , ' d/m/Y ' )
-> limit ( 0 , 10 );
foreach ( $ qb -> getResults () as $ element ){
// ...
}您可以通过使用as关键字作为定界符来使用别名。执行以下操作:
use ArrayQuery QueryBuilder ;
$ qb = QueryBuilder:: create ( $ array );
$ qb
-> addCriterion ( ' name as n ' , ' Ervin Howell ' )
-> addCriterion ( ' username as user ' , ' Antonette ' )
-> addCriterion ( ' address.street as street ' , ' Victor Plains ' );
foreach ( $ qb -> getResults () as $ element ){
// ...
// now you have
// $element['n']
// $element['user']
// $element['street']
}您可以使用getShuffledResults方法来调整查询结果:
use ArrayQuery QueryBuilder ;
$ qb = QueryBuilder:: create ( $ array );
foreach ( $ qb -> getShuffledResults () as $ element ){
// ...
}有关更多示例,请参考QueryBuilderTest。
如果您发现问题或有想法,请参考本节。
该项目已根据MIT许可证获得许可 - 有关详细信息,请参见许可证文件。