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許可證獲得許可 - 有關詳細信息,請參見許可證文件。