= ord("a")) && (ord($c) <= ord("z"))) $b.=$c; $i++; } return $b; } $html = new simple_html_dom(); $html->load_file("https://en.wikipedia.org/wiki/Opinion_polling_for_the_Spanish_general_election,_2015"); $ret = $html->find('table'); $indices=Array(3,4,5,11,12); $partidos=Array( 3=>"PP", 4=>"PSOE", 5=>"IU", 11=>"Cs", 12=>"Podemos" ); $comedia=0; $medias=Array(); $variacion=Array(); foreach ($ret as $tabla) { if (count($tabla->children)>200) { $i=count($tabla->children)-3; $datos=Array(); while ($i > 2) { $i=$i-1; $fila=$tabla->children[$i]; #echo "\n\n fila $i \n\n"; #print_r($fila); $celda=0; foreach ($fila->children as $cuadro) { $celda++; $txt=$cuadro; if ($celda==1) { $tmp = $cuadro->find('a'); $x=$tmp[0]->nodes[0]; $empresa=$x; #echo "Empresa $x\n"; } if (in_array($celda,$indices)) { $tmp = $cuadro->find('b'); $x=$tmp[0]->nodes[0]; if (strlen($x)==0) $x=$cuadro->nodes[0]; $x=(float)(string)$x; $datos[$celda]=$x; } } $nummediamovil=20; $comedia++; if ($comedia>$nummediamovil) $comedia=1; foreach ($indices as $k) { if (count($medias[$k])==$nummediamovil) { if (!in_array(0,$medias[$k])) { $med=array_sum($medias[$k])/$nummediamovil; $dif=$datos[$k]-$med; $empresa=sololetras($empresa); if (!(isset($variacion[$empresa]))) $variacion[$empresa]=Array(); if (!(isset($variacion[$empresa][$k]))) $variacion[$empresa][$k]=Array(); $variacion[$empresa][$k][]=$dif; } } $medias[$k][$comedia]=$datos[$k]; } } } } foreach ($variacion as $k=>$v) { echo "\nEMPRESA: $k\n"; $rate=Array(); foreach ($v as $par=>$dif) { echo $partidos[$par]." (".count($dif).")\t"; $med=round(array_sum($dif)/count($dif),3); echo "$med\n"; if ($med<0) $med=$med*(-1); $rate[]=$med; } echo "DesviaciĆ³n estandar: ".( array_sum($rate)/count($rate) )."\n\n"; }