예제 #1
0
 public function quoteValue($row)
 {
     $enclosure = $this->settings['Enclosure'];
     $delimiter = $this->settings['Delimiter'];
     $encode = $this->settings['EncodeEnclosure'];
     $encodeArray = $this->settings['EnclosureArray'];
     $null = $this->settings['Null'];
     $tabEncode = $this->settings['TabEncode'];
     $quote = function ($value) use($enclosure, $delimiter, $encode, $encodeArray, $null, $tabEncode) {
         $delimiter_esc = preg_quote($delimiter, '/');
         $enclosure_esc = preg_quote($enclosure, '/');
         $type = gettype($value);
         if ($type == 'integer' || $type == 'double') {
             return strval($value);
         }
         if (is_string($value)) {
             if ($tabEncode) {
                 return str_replace(["\t", "\n"], ['\\t', '\\n'], $value);
             }
             if (preg_match("/(?:{$delimiter_esc}|{$enclosure_esc}|\\s)/", $value)) {
                 return $enclosure . str_replace($enclosure, $encode . $enclosure, $value) . $enclosure;
             }
             return $enclosure . strval($value) . $enclosure;
         }
         if (is_array($value)) {
             // Массивы форматируются в виде списка значений через запятую в квадратных скобках.
             // Элементы массива - числа форматируются как обычно, а даты, даты-с-временем и строки - в одинарных кавычках с такими же правилами экранирования, как указано выше.
             // Массивы сериализуются в InsertRow следующим образом: сначла массив сериализуется в строку,
             // как в формате TabSeparated, а затем полученная строка выводится в InsertRow в двойных кавычках.
             $result_array = FormatLine::Insert($value);
             return $encodeArray . '[' . $result_array . ']' . $encodeArray;
         }
         if (null === $value) {
             return $null;
         }
         return $value;
     };
     return array_map($quote, $row);
 }
예제 #2
0
파일: CSV.php 프로젝트: smi2/phpclickhouse
 public static function quoteRow($row)
 {
     return FormatLine::CSV($row);
 }