Hoja de datosHoy mirando la pagina de @Aidan me he topado con una función bastante interesante. Si el otro día publicaba una función que transforma una tabla HTML a array, @Aidan ha creado lo contrario. Una función que transforma un array a tabla, pero dando unos toques de personalización bastante buenos.

Si queremos crear una tabla simple a partir de un array simple solo tenemos que poner nuestro array en la primera variable y imprimirá en la web directamente el código de la tabla, pero si quisiéramos introducir un array multimimensional, metiendo tablas en las celdas, solo tendríamos que poner a true la 2º variable de la función.
Si a demás en vez de que se imprima directamente los datos queremos obtener el string de salida podemos hacerlo directamente con solo cambiar la 3º variable a true, y si queremos cambiar las variables en blanco de nuestro array a algún texto (interesante para hacer tablas de contabilidad y poder poner 0 en los espacios en blanco por ejemplo) solo tenemos que poner el texto a sustituir en el 4º lugar.

PHP:
  1. function array2table($array, $recursive = false, $return = false, $null = ' '){
  2.     // Sanity check
  3.     if(empty($array) || !is_array($array)){ return false; }
  4.     if(!isset($array[0]) || !is_array($array[0])){ $array = array($array); }
  5.  
  6.     // Start the table
  7.     $table = "<table>\n";
  8.     // The header
  9.     $table .= "\t<tr>";
  10.     // Take the keys from the first row as the headings
  11.     foreach (array_keys($array[0]) as $heading) {
  12.         $table .= '<th>' . $heading . '</th>';
  13.     }
  14.     $table .= "</tr>\n";
  15.  
  16.     // The body
  17.     foreach ($array as $row) {
  18.         $table .= "\t<tr>" ;
  19.         foreach ($row as $cell) {
  20.             $table .= '<td>';
  21.            
  22.             // Cast objects
  23.             if (is_object($cell)) { $cell = (array) $cell; }
  24.             if ($recursive === true && is_array($cell) && !empty($cell)) {
  25.                 // Recursive mode
  26.                 $table .= "\n" . array2table($cell, true, true) . "\n";
  27.             } else {
  28.                 $table .= (strlen($cell)> 0) ?
  29.                     htmlspecialchars((string) $cell) :
  30.                     $null;
  31.             }
  32.             $table .= '</td>';
  33.         }
  34.         $table .= "</tr>\n";
  35.     }
  36.     // End the table
  37.     $table .= '</table>';
  38.     // Method of output
  39.     if ($return === false) {
  40.         echo $table;
  41.     } else {
  42.         return $table;
  43.     }
  44. }

Ejemplo de uso:

PHP:
  1. $array_tabla = array("frutas" => array("manzana", "pera", "platano"), "dias" => array("lunes", "martes", "miércoles"), "anio" => "2008");
  2. $tabla = array2table($array_tabla, true, true);
  3. echo $tabla;