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); }
public static function quoteRow($row) { return FormatLine::CSV($row); }