File: D:/HostingSpaces/pietvanmierlo/stempelbv.nl/app/Komma/Kms/Transfer/AbstractCsvExportService.php
<?php
namespace App\Komma\Kms\Transfer;
/**
* Class AbstractCsvExportService
*
*
*
* @package App\Komma\Kms\Transfer
*/
abstract class AbstractCsvExportService extends AbstractCsvTransferService
{
/**
* Returns an array of arrays that represent products.
* Each row represents an item in the form of an array. In the case of products an example could be:
* [
* ['1', 'my awesome product', 'product description']
* ['1', 'my awesome second product', 'product description 2']
* ]
*
* @return array
*/
abstract function export():array;
/**
* Returns a csv file as an array
* Each item in the array represents a row.
* Each row item is an array of column values.
*
* @return array
*/
public function exportToCsvArray():array
{
$csvArray = $this->export();
if(self::HASHEADERROW) array_unshift($csvArray, $this->getHeaderNames());
return $csvArray;
}
/**
* Creates a string that represents a CSV file
*
* @return string
*/
public function exportToCsvFileString():string {
return $this->strPutCsv($this->exportToCsvArray(), self::HASHEADERROW);
}
/**
* Convert a multi-dimensional, associative array to a CSV data string
*
* @param array $data the array of data
* @param bool $hasHeaderRow
* @return string CSV text
*/
private function strPutCsv($data, $hasHeaderRow = true):string {
# Generate CSV data from array
$fh = fopen('php://temp', 'rw'); # don't create a file, attempt
# to use memory instead
foreach ( $data as $row ) {
fputcsv($fh, $row, self::DELIMITER);
}
rewind($fh);
$csv = stream_get_contents($fh);
fclose($fh);
return $csv;
}
}