Hoja de datosComo su propio nombre indica la siguiente función transforma una tabla en un array. Solo lo testado con una tabla con tablas anidadas, posiblemente si la tabla anidada tiene una 3º tabla anidada, no funcione tan bien dependiendo de la posición de las celdas anidadas.

PHP:
  1. function tabla2array($text){
  2.     $original   = array("\n", "\t", '>', '<TD ', '</TD ', '<TR ', '</TR ', '<table ', '<TABLE ');
  3.     $correccion = array('', '', '>', '<td ', '</td ', '<tr ', '</tr ', ' <table ', ' <table ');
  4.     $text      = str_replace($original, $correccion, $text);
  5.    
  6.     preg_match_all('!'."<tr(.*)>(.*)<table(.*)</table(.*)</tr(.*)>".'!U', $text, $tablas_anidadas);
  7.     $tablas_anidadas = $tablas_anidadas[3];
  8.     preg_match_all('!'."<tr(.*)>(.*)</tr(.*)>".'!U', $text, $lineas);
  9.     $lineas = $lineas[2];
  10.     $count  = 0;
  11.     foreach($lineas as $key => $linea){
  12.         if(($count == 0)){
  13.             if(!stristr($linea, '<table ')){
  14.                 preg_match_all('!'."<td (.*)>(.*)</td(.*)>".'!U', $linea, $columna);
  15.                 if(count($columna[2])<=1){
  16.                     $out        = array_merge($out, $columna[2]);
  17.                 } else {
  18.                     $out[$key]  = $columna[2];
  19.                 }
  20.             } else {
  21.                 foreach($tablas_anidadas as $tabla){
  22.                     $out[$key]  = (tabla2array($tabla));
  23.                 }
  24.                 $count  = (count($out[$key])-1);
  25.             }
  26.         } else {
  27.             $count--;
  28.         }
  29.     }
  30.     return $out;
  31. }

Ejemplo de uso de la función con una búsqueda de google:

PHP:
  1. $texto = @file_get_contents('http://www.google.es/search?q=tierra0&btnG=Buscar&meta=');
  2. $tabla = tabla2array($texto);
  3. print_r($tabla);