KeySort.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. namespace Predis\Commands;
  3. class KeySort extends Command
  4. {
  5. public function getId()
  6. {
  7. return 'SORT';
  8. }
  9. protected function filterArguments(Array $arguments)
  10. {
  11. if (count($arguments) === 1) {
  12. return $arguments;
  13. }
  14. $query = array($arguments[0]);
  15. $sortParams = array_change_key_case($arguments[1], CASE_UPPER);
  16. if (isset($sortParams['BY'])) {
  17. $query[] = 'BY';
  18. $query[] = $sortParams['BY'];
  19. }
  20. if (isset($sortParams['GET'])) {
  21. $getargs = $sortParams['GET'];
  22. if (is_array($getargs)) {
  23. foreach ($getargs as $getarg) {
  24. $query[] = 'GET';
  25. $query[] = $getarg;
  26. }
  27. }
  28. else {
  29. $query[] = 'GET';
  30. $query[] = $getargs;
  31. }
  32. }
  33. if (isset($sortParams['LIMIT']) && is_array($sortParams['LIMIT'])
  34. && count($sortParams['LIMIT']) == 2) {
  35. $query[] = 'LIMIT';
  36. $query[] = $sortParams['LIMIT'][0];
  37. $query[] = $sortParams['LIMIT'][1];
  38. }
  39. if (isset($sortParams['SORT'])) {
  40. $query[] = strtoupper($sortParams['SORT']);
  41. }
  42. if (isset($sortParams['ALPHA']) && $sortParams['ALPHA'] == true) {
  43. $query[] = 'ALPHA';
  44. }
  45. if (isset($sortParams['STORE'])) {
  46. $query[] = 'STORE';
  47. $query[] = $sortParams['STORE'];
  48. }
  49. return $query;
  50. }
  51. protected function onPrefixKeys(Array $arguments, $prefix)
  52. {
  53. $arguments[0] = "$prefix{$arguments[0]}";
  54. if (($count = count($arguments)) > 1) {
  55. for ($i = 1; $i < $count; $i++) {
  56. switch ($arguments[$i]) {
  57. case 'BY':
  58. case 'STORE':
  59. $arguments[$i] = "$prefix{$arguments[++$i]}";
  60. break;
  61. case 'GET':
  62. $value = $arguments[++$i];
  63. if ($value !== '#') {
  64. $arguments[$i] = "$prefix$value";
  65. }
  66. break;
  67. case 'LIMIT';
  68. $i += 2;
  69. break;
  70. }
  71. }
  72. }
  73. return $arguments;
  74. }
  75. }