123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- <?php
- /**
- * Write objects to a stream in csv format based on map.
- *
- * Usage
- *
- * $object->property_name_1 = 'name 1';
- * $object->property_name_2 = 'name 2';
- *
- * $map = array( 'property_name_1' => 'Header title 1',
- * 'property_name_2' => 'Header title 2');
- *
- * $writer = CsvObjectWriter::create($map, 'temp');
- * $writer->add($object);
- *
- * Output
- *
- * "Header title 1";"Header title 2"
- * "name 1";"name 2"
- *
- * @license /licence.txt
- * @author Laurent Opprecht <laurent@opprecht.info>
- */
- class CsvObjectWriter extends CsvWriter
- {
- /**
- *
- * @param string|object $stream
- * @return CsvWriter
- */
- static function create($stream, $map = '*', $delimiter = ';', $enclosure = '"')
- {
- return new self($stream, $map = '*', $map, $delimiter, $enclosure);
- }
- protected $map = '*';
- protected $headers_written = false;
- function __construct($stream, $map = '*', $delimiter = ';', $enclosure = '"')
- {
- parent::__construct($stream, $delimiter, $enclosure);
- $this->map = $map;
- }
- public function get_map()
- {
- return $this->map;
- }
- /**
- *
- * @param object $item
- * @return boolean
- */
- public function put($item)
- {
- $data = $this->convert($item);
- if (empty($data)) {
- return false;
- }
- $this->writer_headers();
- parent::put($data);
- return true;
- }
- /**
- * Convert object to array of data
- * @param object $object
- * @return array
- */
- protected function convert($item)
- {
- $result = array();
- $map = $this->map;
- if ($map == '*') {
- return (array) $item;
- }
- foreach ($map as $key => $value) {
- $result[$key] = isset($item->{$key}) ? $item->{$key} : '';
- }
- return $result;
- }
- /**
- *
- * @param array $items
- */
- public function add_all($items)
- {
- foreach ($items as $item) {
- $this->add($item);
- }
- }
- /**
- *
- * @param array|object $item
- */
- public function add($item)
- {
- if (is_array($item)) {
- $this->add_all($item);
- return;
- }
- $this->put($item);
- }
- protected function writer_headers()
- {
- if ($this->headers_written) {
- return;
- }
- $this->headers_written = true;
- $map = $this->map;
- if (!is_array($map)) {
- return;
- }
- $headers = array();
- foreach ($map as $key => $value) {
- $headers[] = $value;
- }
- parent::put($headers);
- }
- }
|