initOption($options); if ($options['headers'] === null) { if (empty($data)) { return $res; } $options['headers'] = array_keys($data[0]); } if ($options['has_headers']) { $res .= $this->serializeLine($options['headers'], $options); } foreach ($data as $e) { $line = []; foreach ($options['headers'] as $key) { $line[] = $e[$key]; } $res .= $this->serializeLine($line, $options); } return $res; } /** * @param array $line * @param array $options * @return string */ protected function serializeLine($line, $options) { $enclosure = $options['enclosure']; if (!empty($enclosure)) { foreach ($line as &$value) { $value = str_replace( $enclosure, $enclosure . $enclosure, $value ); $value = "{$enclosure}{$value}{$enclosure}"; } unset($value); } $res = implode($options['separator'], $line); $res .= $options['eol']; return $res; } /** * @param array $options * @return array */ protected function initOption($options) { if (!isset($options['has_headers'])) { $options['has_headers'] = true; } if (!isset($options['headers'])) { $options['headers'] = null; } if (!isset($options['separator'])) { $options['separator'] = ','; } if (!isset($options['enclosure'])) { $options['enclosure'] = '"'; } if (!isset($options['eol'])) { $options['eol'] = "\n"; } return $options; } }