3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * Class FyndiqCSVFeedWriter generates CSV export feed */ class FyndiqCSVFeedWriter { /** * @var array export column names */ private $header = array(); /** * @var array products for export */ private $products = array(); /** * @var array fields upon which `addslashes` will be applied */ private $slashFields = array( 'article-name', 'product-brand', 'product-title', 'product-description', ); /** * Apply field transformations * * @param array $product * @return array mixed */ private function processProduct($product) { foreach($this->slashFields as $field) { if (!empty($product[$field])) { $product[$field] = addslashes($product[$field]); } } return $product; } /** * Add product to the feed * * @param $product * @return bool */ public function addProduct($product) { if ($this->isValidProduct($product)) { $this->header = array_unique(array_merge($this->header, array_keys($product))); $this->products[] = $this->processProduct($product); return true; } return false; } /** * Flush the feed data to the stream * * @return bool */ public function write() { // Write header if (fputcsv($this->stream, $this->header) === false) { return false; } // Write data foreach ($this->products as $product) { $finalProduct = array(); foreach ($this->header as $column) { $finalProduct[] = isset($product[$column]) ? $product[$column] : ''; } if (fputcsv($this->stream, $finalProduct) === false) { return false; } } unset($this->header); unset($this->products); return true; } }

preferences:
61.71 ms | 402 KiB | 5 Q