Mixed in Table: Array o Object in tabella

31 Mar 2019 | M.A.D.R.

Avete mai stampato un Array o Object in una tabella in modo facile e veloce?

Bentornati, abbiamo preso un pò di dimestichezza con gli array e gli oggetti, ma quando effettuiamo il debug dell'applicazione risulta essere impossibile leggere correttamente il contenuto.

Oggi parliamo di table_helper, un tool che farà sicuramente la felicità per gli utenti più inclini alla stampa degli array. Si avete capito, stampiamo gli array in HUMAN MODE!!!

Cosa significa stampare in HUMAN MODE?

Semplicemente stampare in modo da far comprende il contenuto all'interno di una o più variabili.

Immaginiamo di dover stampare e/o visualizzare a schermo un dato array/object, servirebbe un print_r() o addirittura un var_dump() per non parlare per il nuovo e ostico dd(), ed invece NO!

Stiamo parlando di un piccolo tool che ci permetterà di visualizzare a schermo il contenuto della nostra variabile, graficamente simpatico con l'aggiunta di alcuni effetti di toggle.

Torniamo alla nostra ipotesi... Abbiamo quindi una variabile con il seguente contenuto:

La semplice stampa risulta essere in questo modo

invece il nostro tool trasforma questa stampa orribile e poco leggibile in quanto dato dalle immagini sotto.

Bene abbiamo visto alcune differenze, ma andiamo al nocciolo della questione:

Come si attiva la funzione per la stampa?

Semplicemente utilizzando il nostro file helper array richiamando la funzione print_array_boostrap($array/$object). Vediamo come si comporta:

Per prima cosa definiamo gli script e le librerie che ci servono per il corretto funzionamento, subito dopo richiamiamo la funzione print_array() per effettuare il rendering della nostra variabile...

NB: Necessita del file string_helper.php in quando ogni container è caratterizzato dall'ID univoco creato con create_string().

Risorse utili

/**
 * Copyright (c) 2019. Licenza Open Source - public domine
 * Il codice di questo file è reso disponibile secondo le regole vigente e con licenza d'uso PD.
 * Il codice riportato è un programma di cui codice sorgente è reso disponibile completo di tutte le sue
 * funzionalità e può essere modificato secondo le proprie esigenze.
 * Qualora il codice risultasse copiato su altri portali senza citarne la fonte saranno applicate tutte le
 * disposizioni in materia di Proprietà Intellettuale.
 */
/**
 * Created by PhPS.
 * User: macus_adi
 * Project Name: utils_git
 * File: table_helper.php
 * Path: root/helper/table_helper.php
 * Date: 17/02/2019
 * Time: 10:05
 */

if(!function_exists('random_string'))include_once __DIR__.'/string_helper.php';
if(!function_exists('array_to_table')){
	function array_to_table($array){
		$tbl='<table>';
		foreach ($array as $k=>$v){
			$tbl.='<tr>';
			foreach ($v as $kk=>$vv){
				$tbl.='<td>'.$vv.'</td>';
			}
			$tbl.='</tr>';
		}
		$tbl.='</table>';
		return $tbl;
	}
}
if(!function_exists('print_array')){
	function print_array($my_array,$class='table-primary'){
		if(is_object($my_array))$my_array=get_object_vars($my_array);
		if (is_array($my_array)) {
			echo "<table class='table ".$class." table-bordered' width=100%>";
			$id_collapsemaster=random_string('alnum',24);
			echo '<tr><td colspan=2 ><b style="cursor: pointer;" onclick="toggle_this(\''.$id_collapsemaster.'\')">ARRAY</b></td></tr>';
			foreach ($my_array as $k => $v) {
				echo '<tr class="'.$id_collapsemaster.' d-none">
				<td valign="top" style="width:40px;">';
				$id_collapse=random_string('alnum',24);
				echo '<b style="cursor: pointer;" onclick="toggle_this(\''.$id_collapse.'\')">' . $k . '</strong></td><td class="'.$id_collapse.'">';
				print_array($v,$class);
				echo "</td></tr>";
			}
			echo "</table>";
			return;
		}
		echo $my_array;
	}
}
if(!function_exists('print_array_bootstrap')){
	function print_array_boostrap($array,$table_class='table-primary',$container_class='container-fluid'){
		echo '<script>function toggle_this(data){var element = document.getElementsByClassName(data);for(var i in element){element[i].classList.toggle(\'d-none\');}}</script>';
		echo '<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" type="text/css" rel="stylesheet" />';
		echo '<div class="'.$container_class.'"><div class="row"><div class="col-md-12"> ';
		print_array($array,$table_class);
		echo '</div></div></div>';
	}
}

Soluzioni complete per ogni esigenza