Banner

Ultima revisión 22/12/2012

Convertir de Array a HTML en PHP (array2HTML)

array2html es una función que permite convertir un array asociativo en una Tabla HTML de forma sencilla en 2 pasos. Como veréis, sólo hay que enviarle un array bien formado.

Para crear la estructura de tabla primero se añadirán las partes fijas como son table, thead y tbody. Seguidamente se recorrerá el array haciendo que cada elemento del array sea una fila.

/*     **************************************************************************************************************************************************************************************************
    FUNCIÓN PARA CONVERTIR UN ARRAY ASOCIATIVO EN FORMATO DE TABLA HTML.
    PARÁMETROS:
    -----------
    $data             --> ES EL ARRAY FUENTE
    $level            --> NO CAMBIAR. INDICA EL NODO DÓNDE ESTA. SE USA PARA EL PROCESO RECURSIVO.
    $sub            --> NO CAMBIAR. INDICA EL PRIMER NODO DE LA FILA.
    ***************************************************************************************************************************************************************************************************/
/**
 * Function for convert an array associative to HTML table object.
 * @param string $data The source array.
 * @param int level Indicates recursive level. 
 * @param string $sub Indicates ther first child of row.
 * @return string Returns the HTML table body.
 */

function array2html_tBody($array, $level, $sub){
    $result = "";
    if (is_array($array)){
        foreach($array as $key => $value) {
            $offset = "";
            if (is_array($value)){
                $offset = "<tr>".str_repeat("<td></td>", $level);
                $result .= $offset . "<th>" . $key . "</th>";
                $result .= array2html_tBody($value, $level+1, true);
            } else {
                if (!$sub){ // Si es el primer nodo
                    $offset = "<tr>".str_repeat("<td></td>", $level);
                }
                $sub = false;
                $result .= $offset . "<th>" . $key . "</th><td>" . $value . "</td>"."</tr>\n";
            }
        }
    } else {
        return $result;
    }
    return $result;
}

/*     **************************************************************************************************************************************************************************************************
    FUNCIÓN PARA CONVERTIR UN ARRAY ASOCIATIVO EN FORMATO CSV HTML.
    PARÁMETROS:
    -----------
    $data             --> ES EL ARRAY FUENTE
    $level            --> NO CAMBIAR. INDICA EL NODO DÓNDE ESTA. SE USA PARA EL PROCESO RECURSIVO.
    ***************************************************************************************************************************************************************************************************/
/**
 * Function for convert an array associative at SOAP messages. Only used with Web Service connection.
 * @param string $data The source array.
 * @param int Indicates recursive level. 
 * @return string Returns a string in HTML Format table.
 */
        
function array2html($arr, $level=0){
    $result  = '<table cellspacing="2" cellpadding="2" border="1" >'."\n";
    $result .= '<thead>'."\n";
    $result .= '<tr><th colspan="50">Request Response</th></tr>'."\n";
    $result .= '</thead>'."\n";
    $result .= '<tbody>'."\n";
    $result .= array2html_tBody($arr, 0, 0);
    $result .= '</tbody>'."\n";
    $result .= "</table>\n";
    
    return  $result;
}

$arr = array("user" => "root", "user_id" => "1", "password" => "contraseña", "mensaje" => array("id" => "1", "descripcion" => "Descripción del texto", "prioridad" => "Alta"));
$html = array2html($arr);

header ("Content-Type:text/html");
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'."\n";
echo '<html xmlns="http://www.w3.org/1999/xhtml">'."\n";
echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';
echo '<meta name="description" content="metaDescription" />';
echo '<head>'."\n";
echo "\n";
echo '</head>'."\n";
echo '<body>'."\n";
echo $html;
echo '</body>'."\n";
echo '</html>'."\n";

Espero que os sea útil alguna vez.