Banner

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.