Logo de islavisual
Logo de islavisual IslaVisual
imagen de sección

Ultima revisión 08/01/2013

Convertir una Tabla HTML en Array con PHP

HTML2Array es una función que permite convertir una tabla HTML en un array asociativo. Sólo necesita enviar una cadena con formato de tabla HTML.

Lo primero que hace es liberar el código sobrante que no se utilizará en el array. Después recorre las filas de la tabla onstruyendo un CSV separado por puntos y coma. Finalmente, llama a la función que describimos hace unos días CSV2Array y nos devuelve el array asociativo correspondiente.

/**
* Function to convert a HTML table string into an associative array readable for the application. 
* The conversion is done in two steps. First is translated to CSV format and more later is converted to Array.
* @param string $html The source HTML table.
* @return array Returns an associative array readable.
* HTML example for the application.
* -------------------------------
* <table class="tableISV" >
*     <tr><th>language</th><td>español</td></tr>
*     <tr><th>query</th><td>Convertir</td></tr>
*     <tr><th>origen</th><td>html</td></tr>
*     <tr><th>destino</th><td>array</td></tr>
*     <tr><th>user</th><td>username</td><td>root</td></tr>
*     <tr><td></td><th>password</th><td>toor</td></tr>
* </table>
*/

function HTML2Array($html){
    preg_match("/<table.*?>.*?<\/[\s]*table>/s", $html, $table_html);

    preg_match_all("/<tr.*?>(.*?)<\/[\s]*tr>/s", $table_html[0], $matches);

    $table = array();
    foreach($matches[1] as $row_html){
        preg_match_all("|<[^>]+>(.*)</[^>]+>|U", $row_html, $td_matches);
        $row = array();
        $str_tr = "";
        for($i=0; $i<count($td_matches[1]); $i++){
            $td = strip_tags(html_entity_decode($td_matches[1][$i]));
            $row[$row_headers[$i]] = $td;
            $str_tr .= ";".$td;
        }
        $str_tr = substr($str_tr, 1);
        $str .= $str_tr."\n";
    }

    $result =  CSV2Array($str, ";");
    return $result;
}
$str = '<table class="tableISV" >
    <tr><th>language</th><td>español</td></tr>
    <tr><th>query</th><td>Convertir</td></tr>
    <tr><th>origen</th><td>html</td></tr>
    <tr><th>destino</th><td>array</td></tr>
    <tr><th>user</th><td>username</td><td>root</td></tr>
    <tr><td></td><th>password</th><td>toor</td></tr>
</table>';
$arr = HTML2Array($str);
header('Content-Type: text/html; charset=utf-8');
echo print_r($arr);

Espero que os sea útil alguna vez.

Sobre el autor

Pablo Enrique Fernández Casado

CEO de IslaVisual, Manager, Full Stack Analyst Developer y formador por cuenta ajena con más de 25 años de experiencia en el campo de la programación y más de 10 en el campo del diseño, UX, usabilidad web y accesibilidad web. También es escritor y compositor de música, además de presentar múltiples soft kills como la escucha activa, el trabajo en equipo, la creatividad, la resiliencia o la capacidad de aprendizaje, entre otras.

Especializado en proveer soluciones integrales de bajo coste y actividades de consultoría de Usabilidad, Accesibilidad y Experiencia de Usuario (UX), además de ofrecer asesoramiento en SEO, optimización de sistemas y páginas web, entre otras habilidades.