/web/lib/meta_array.php

https://bitbucket.org/lishnih/phpndt.yii2 · PHP · 185 lines · 124 code · 37 blank · 24 comment · 23 complexity · 9568c815a9c36971ec42f1242db3f216 MD5 · raw file

  1. <?php // Stan 2008-05-17
  2. /**
  3. * @package phpNDT
  4. * @name MetaArray
  5. * @version 2.0
  6. * @date 2013-09-25
  7. *
  8. * @author Stan
  9. * @email lishnih@gmail.com
  10. * @copyright 2006—2013
  11. * @license MIT
  12. */
  13. // Класс MetaArray
  14. // Данный класс работает в связке с массивом $_GET и предназначен
  15. // для хранения условий переданных через массив по внутреннему протоколу
  16. class MetaArray {
  17. var $classname = 'MetaArray'; // Имя класса
  18. var $ver = '2.0'; // Версия
  19. var $meta_array = array(); // Массив хранения условий
  20. var $tables = array(); // Массив импортированных таблиц
  21. // Конструктор
  22. // $get_array - массив условий по умолча $_GET
  23. // $tables - какие ветки необходимо извлечь из $get_array
  24. // если $tables не задан, добавятся все ветки из $get_array
  25. function MetaArray ( $get_array = NULL, $tables = NULL ) {
  26. if ( $get_array === NULL )
  27. $get_array = $_GET;
  28. if ( $tables and !is_array( $tables ) )
  29. $tables = explode( ',', $tables );
  30. foreach ( $get_array as $table => $columns_expr )
  31. if ( $tables === NULL or in_array( $table, $tables ) )
  32. if ( is_array( $columns_expr ) )
  33. $this->meta_array[$table] = $columns_expr;
  34. $this->tables = array_keys($this->meta_array);
  35. } // function
  36. // Возращает True, если $meta_array пустой
  37. function is_empty ( ) {
  38. return $this->meta_array ? False : True;
  39. } // function
  40. // Возращает заданную ветку или ключ в ветке $meta_array
  41. function get ( $table = NULL, $column = NULL ) {
  42. if ( $column !== NULL )
  43. return isset( $this->meta_array[$table][$column] ) ?
  44. $this->meta_array[$table][$column] : NULL;
  45. if ( $table !== NULL )
  46. return isset( $this->meta_array[$table] ) ?
  47. $this->meta_array[$table] : array();
  48. return $this->meta_array;
  49. } // function
  50. // Возращает строку (с формате SQL) для заданных таблиц $meta_array
  51. function serialize_sql ( $tables = NULL, $table_prefix = '' ) {
  52. if ( $this->is_empty() )
  53. return '1';
  54. if ( $tables === NULL )
  55. $tables = $this->tables;
  56. if ( !is_array( $tables ) )
  57. $tables = explode( ',', $tables );
  58. $str = '';
  59. foreach ( $tables as $table ) {
  60. if ( in_array( $table, $this->tables ) ) {
  61. foreach ( $this->get( $table ) as $column => $columns_expr ) {
  62. $tablename = $table_prefix ? $table_prefix . '_' . $table : $table;
  63. $expr = $this->serialize_expr_sql( $columns_expr );
  64. if ( $expr ) {
  65. if ( $str )
  66. $str .= ' AND ';
  67. $str .= $tablename . '.' . $column . ' ' . $expr;
  68. } // if
  69. } // foreach
  70. } // if
  71. } // foreach
  72. if ( !$str )
  73. $str = '1';
  74. return $str;
  75. } // function
  76. // Возращает строку (с формате GET) для заданных таблиц $meta_array
  77. function serialize_get ( $tables = NULL ) {
  78. if ( $tables === NULL )
  79. $tables = $this->tables;
  80. if ( !is_array( $tables ) )
  81. $tables = explode( ',', $tables );
  82. $str = '';
  83. foreach ( $tables as $table ) {
  84. $str1 = MetaArray::serialize_array_get( $this->get( $table ), $table );
  85. if ( $str1 ) {
  86. if ( $str )
  87. $str .= '&';
  88. $str .= $str1;
  89. } // if
  90. } // foreach
  91. return $str;
  92. } // function
  93. // Возращает строку (с формате SQL) из $array (в формате $meta_array)
  94. function serialize_expr_sql ( $column_expr ) {
  95. if ( is_array( $column_expr ) ) {
  96. $operand = key( $column_expr );
  97. $params = $column_expr[$operand];
  98. switch ( $operand ) {
  99. case '<<':
  100. $str = '<= \'' . $params . '\'';
  101. break;
  102. case '>>':
  103. $str = '>= \'' . $params . '\'';
  104. break;
  105. case '!':
  106. $str = '!= \'' . $params . '\'';
  107. break;
  108. case '~':
  109. case '%':
  110. $str = 'LIKE \'' . $params . '\'';
  111. break;
  112. case '%%':
  113. $str = 'LIKE \'%' . $params . '%\'';
  114. break;
  115. case 'is':
  116. $str = 'IS ' . $params;
  117. break;
  118. case '!is':
  119. $str = 'NOT IS ' . $params;
  120. break;
  121. default:
  122. $str = $operand . ' \'' . $params . '\'';
  123. } // switch
  124. return $str;
  125. } else
  126. return '= \'' . $column_expr . '\'';
  127. } // function
  128. // Возращает строку (с формате GET) из $array (в формате $meta_array)
  129. function serialize_array_get ( $array, $prefix = '' ) {
  130. if ( is_array( $array ) ) {
  131. $str = '';
  132. foreach ( $array as $key => $val ) {
  133. if ( $prefix )
  134. $val = MetaArray::serialize_array_get( $val, $prefix . '[' . $key . ']' ); // !!!
  135. else
  136. $val = MetaArray::serialize_array_get( $val, $key );
  137. if ( $val ) {
  138. if ( $str )
  139. $str .= '&';
  140. $str .= $val;
  141. } // if
  142. } // foreach
  143. return $str;
  144. } else
  145. return $prefix . '=' . htmlspecialchars( $array );
  146. } // function
  147. } // class
  148. ?>