Blame view

vendor/yiisoft/multiparser/Converter.php 4.67 KB
3c5edb9b   Mihail   edit createAssocA...
1
2
3
4
5
6
7
8
9
  <?php
  /**
  * Created by PhpStorm.
   * User: Cibermag
  * Date: 31.08.2015
  * Time: 12:50
  */
  
  namespace yii\multiparser;
642796c8   Mihail   merge with server
10
11
  use common\components\CustomVarDamp;
  use yii\base\Behavior;
3c5edb9b   Mihail   edit createAssocA...
12
13
  
  // класс который содержит преобразователи значений (фильтры) используемые при парсинге
642796c8   Mihail   merge with server
14
  class Converter extends Behavior
3c5edb9b   Mihail   edit createAssocA...
15
16
17
18
  {
  
      const METHOD_PREFIX = 'convertTo';
  
642796c8   Mihail   merge with server
19
      //public  $configuration = [];
3c5edb9b   Mihail   edit createAssocA...
20
  
642796c8   Mihail   merge with server
21
      public static function convertToFloat($value)
3c5edb9b   Mihail   edit createAssocA...
22
      {
3c5edb9b   Mihail   edit createAssocA...
23
24
25
26
27
28
29
30
31
32
33
34
35
36
          if ($value == '') {
              $value = 0;
          }
          $value = trim(str_replace(",", ".", $value));
          $value = preg_replace("/[^0-9.]+/", "", strtoupper($value));
  
          if ($value == '') {
              return '';
          }
          $value = round( (float)$value, 2 );
  
          return $value;
      }
  
642796c8   Mihail   merge with server
37
      public static function convertToInteger($value)
3c5edb9b   Mihail   edit createAssocA...
38
39
40
41
42
43
44
45
46
47
48
49
50
51
      {
          if ($value == '') {
              $value = 0;
          }
          $value = trim(str_replace(",", ".", $value));
          $value = preg_replace("/[^0-9.]+/", "", strtoupper($value));
          if ($value == '') {
              return '';
          }
          $value = round((int)$value, 2);
  
          return $value;
      }
  
642796c8   Mihail   merge with server
52
      public static function convertToString($value)
3c5edb9b   Mihail   edit createAssocA...
53
      {
3c5edb9b   Mihail   edit createAssocA...
54
55
56
57
58
59
60
61
62
63
          $res = '';
          if (is_array($value)) {
  
              $res = Encoder::encodeArray($value);
  
          }elseif ( is_string($value) ) {
  
              $res = Encoder::encodeString($value);
  
          }
3c5edb9b   Mihail   edit createAssocA...
64
65
66
          return $res;
      }
  
3c5edb9b   Mihail   edit createAssocA...
67
68
69
70
71
72
73
74
75
  
      /**
       * @param $name - имя метода конвертации
       * @param $value - значение на конвертацию
       * @return mixed
       */
      public static function __callStatic( $name, $value )
      {
          $method_name =  self::METHOD_PREFIX . $name;
3c5edb9b   Mihail   edit createAssocA...
76
  
642796c8   Mihail   merge with server
77
78
          if ( method_exists( static::class, $method_name ) ) {
              return static::$method_name( $value[0] );
3c5edb9b   Mihail   edit createAssocA...
79
80
81
82
83
84
85
86
  
          } else{
              // если такого метода конвертации не предусмотрено, то возвращаем не конвертируя
              return $value[0];
  
          }
      }
  
642796c8   Mihail   merge with server
87
88
89
90
91
      public function __call($name, $params)
      {
          return self::__callStatic( $name, $params );
      }
  
3c5edb9b   Mihail   edit createAssocA...
92
93
  
      /**
642796c8   Mihail   merge with server
94
95
       * @param $arr - массив для конвертирования
       * @param $configuration - массив конфигурация конвертирования
3c5edb9b   Mihail   edit createAssocA...
96
97
98
       * @return mixed
       * конвертирует массив по полученным настройкам, вызывая последовательно функции конвертации (указанные в конфигурации)
       */
642796c8   Mihail   merge with server
99
      public static function convertByConfiguration( $arr, $configuration  )
3c5edb9b   Mihail   edit createAssocA...
100
101
      {
          $result = $arr;
642796c8   Mihail   merge with server
102
103
104
105
         // \common\components\CustomVarDamp::dumpAndDie( $result );
          $hasKey = isset( $configuration['hasKey'] );
          foreach ( $configuration['configuration'] as $key => $value ) {
              CustomVarDamp::dump($key);
3c5edb9b   Mihail   edit createAssocA...
106
107
108
              if ( $hasKey ){
                  //  у нас ассоциативный массив, и мы можем конвертировать каждое значение в отдельности
                  if ( is_array( $value ) ) {
642796c8   Mihail   merge with server
109
110
111
112
113
114
115
                      //если пустой массив то конвертируем всю строку
                      if (count( $value ) === 0 ){
  
                          $result = self::$key( $arr );
                          continue;
                      }
                      // иначе конвертируем каждую ячейку в отдельности
3c5edb9b   Mihail   edit createAssocA...
116
117
118
                      foreach ($value as $sub_value) {
                          if (isset($arr[$sub_value])) {
                              // конвертируем только те ячейки которые сопоставлены в прочитанном массиве с колонками в конфигурационном файле
642796c8   Mihail   merge with server
119
                              $result[$sub_value] = self::$key( $arr[$sub_value] );
3c5edb9b   Mihail   edit createAssocA...
120
121
122
123
124
125
126
                          }
  
                      }
                  } else {
  
                      if (isset($arr[$value])) {
                          // конвертируем только те ячейки которые сопоставлены в прочитанном массиве с колонками в конфигурационном файле
642796c8   Mihail   merge with server
127
                          $result[$value] = self::$key( $arr[$value] );
3c5edb9b   Mihail   edit createAssocA...
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
                      }
  
                  }
  
              } else {
                  // нет заголовка - мы можем конвертировать только строку в целом
                  $result = self::$key( $arr );
              }
  
          }
  
          return $result;
      }
  
  
  
  }