PHP: Esportazione dati in diversi Formati – CSV, XML, JSON, SERIALIZE

19 Apr 2019 | M.A.D.R.

Esportiamo un qualsiasi array in diversi formati: XML, JSON, CSV, SERIALIZE.

Qualche giorno fa abbiamo visto come creare una semplice esportazione dei dati nel formato CSV, oggi ampliamo lo stesso progettino implementando poche righe di codice formattate correttamente.

La prima operazione da effettuare è sicuramente estendere la nostra classe, (per chi non avesse letto l’artico riporto il link qui) e con l’utilizzo del nostro wrapper per medoo.in reperibile qui:Connessione ad un Database: Medoo e un piccolo Wrap

Vediamo la stesura del nostro codice:

class Utils_Export extends Utils_Estrazione {


	public function __construct( array $resukt_query = [], array $options = [] ) {
		parent::__construct( $resukt_query, $options );
	}

	/**
	 * Esportazione
	 * @param string $format Supporta csv,xml,json,serialize
	 * @param bool $output
	 * @param bool $save
	 */
	public function export_results($format='csv',$output=TRUE,$save=FALSE){
		call_user_func([$this,$format],[]);
	}

	private function csv(){
		$this->init()->output();
	}
	private function json(){
		echo json_encode($this->_operation()->output,128);
	}
	private function xml(){
		$t_xml=''."rn";
		foreach ($this->_operation()->output as $k=>$v){
			$t_xml.="t".''."rn";
			foreach ($v as $kk=>$vv){
				$t_xml.="tt".'<'.$kk.'>'.$vv.''."rn";
			}
			$t_xml.="t".''."rn";
		}
		$t_xml.='';
		$this->output=$t_xml;
		$this->output();
	}
	private function serialize(){
		$this->output=serialize($this->_operation()->output);
		$this->output();
	}
}

Come possiamo vedere con poche linee di codice siamo riuscita ad estendere la nostra Classe.

L’implementazione necessita l’aggiunta di un metodo _operation e la modifica da private a protected del metodo _create_string:

public function _operation(){
		$this->output=[];
		foreach ($this->result as $k=>$v){
			$this->temp_data=$v;
			$f_=['_add_zeros','_convert_date','_delete_data'];
			foreach ($f_ as $items)call_user_func([$this,$items],[]);

			$this->output[]=$this->temp_data;
		}

		return $this;
	}

A questo punto possiamo iniziare a testare la nostra applicazione in questo modo:

$connection=new Custom_QueryBuilder();
$res=$connection->set_table('test_export_csv')->crud_dbase('select')->result;
$define=[
			'set_zeros_fields'=>['id'],
			'set_separator'=>'|',
			'set_number_zeros_string'=>8,
			'set_date_fields'=>['val2','val3'],
			'date_format'=>'d-m-Y'
		];
$csv=new Utils_Export($res,$define);
$csv->export_results('serialize');

Et voilà, abbiamo esteso la nostra classe, con alcune funzioni importati.

NB: Non è implementata alcuna direttiva per l’header di output!!!!!!!

Buona esportazione a tutti!

Soluzioni complete per ogni esigenza