function array2table($array, $recursive = true, $null = ' ')
{
   // Sanity check
   if (empty($array) || !is_array($array)) {
      return false;
}

if (!isset($array[0]) || !is_array($array[0])) {
   $array = array($array);
}

// Start the table
   $table = '<table>';

   // The header
   $table .= "\t<tr>";
   // Take the keys from the first row as the headings
   foreach (array_keys($array[0]) as $heading) {
      $table .= '<th>' . $heading . '</th>';
   }
   $table .= "</tr>\n";

   // The body
   foreach ($array as $row) {
      $table .= "\t<tr>" ;
      foreach ($row as $cell) {
         $table .= '<td>';

         // Cast objects
         if (is_object($cell)) { $cell = (array) $cell; }

         if ($recursive === true && is_array($cell) && !empty($cell)) {
            // Recursive mode
            $table .= "\n" . array2table($cell, true, true) . "\n";
          else {
            $table .= (strlen($cell) > 0) ?
               htmlspecialchars((string) $cell) :
               $null;
         }

         $table .= '</td>';
}

         $table .= "</tr>\n";
   }

   $table .= '</table>';
   return $table;
}

print array2table($a);

}