Pondré todo el código que uso para que se vea todo, pero antes me explicaré:
Intento hacer un ranking de paises del medallero de Atenas 2004, bueno, en realidad es un parseo (si se le puede llamar así ), del archivo oficial de la web.
Una vez aislada la parte de código que me interesa de dicho archivo, creo yo mi tabla y muestro los datos como yo prefiera.
Recorro el archivo linea a linea y estoy intentando crear un array con los datos de cada pais, pero no puedo acceder a ese array desde fuera del bucle que recorre el archivo, es decir:
Yo creo un array dentro de un bucle for($i...), para poder acceder al array he de asignarle indices con $i, y en este array[$i] estan los elementos de cada pais, así, el array queda, por ejemplo:
$paises[$i][nombre]
$paises[$i][ranking]
etc...
Pero fuera del bucle no puedo llamar a $paises[1][nombre], etc...
no caigo como hacerlo, he pensado en que con cada iteracion del bucle establecer ese array como una variable global o algo así, ya que luego los usaré en otros script pero creo que eso no va.
También podría intentar guardarlo en una DB pero no se actualizaría y... es mucho consumo no?.
Bueno, como veis los arrays me traen de cabeza y estoy muyyyy pegado en el tema.
Os pongo el código, ok?:
Código PHP:
<?php
$origen_url = "http://www.marca.com/atenas2004/medallero/medallero.html";
// Verificamos el enlace
if (valida_url($origen_url))
{
$archivo = file($origen_url);
$lineas = count($archivo);
echo '
<table class="medallero">
<tr class="definicion">
<td>Posicion</td>
<td>Pais</td>
<td>Oro</td>
<td>Plata</td>
<td>Bronce</td>
<td>Total</td>
</tr>
';
/////////////////////////////////////////////////
// Buscamos paises que usan 2 celdas para el nombre
for($i=0; $i<$lineas; $i++)
{
if (eregi("Zelanda",$archivo[$i]))
{
$nueva_zelanda = $i-3;
//echo "Línea $nueva_zelanda: Nueva Zelanda<br />";
}
if (eregi("Serbia",$archivo[$i]))
{
$servia = $i-2;
//echo "Línea $servia: Serbia<br />";
}
}
///////////////////////////////////////////////
for($i=0; $i<$lineas; $i++)
{
// Buscamos donde comienza la columna de medallas
if (eregi("<tr bgcolor=\"#EEEEEE\">",$archivo[$i]))
{
//echo "Línea $i: ENCONTRADA!!<br />";
// Buscamos si están Nueva Zelanda
// o Servia, pues usan otra celda para su segundo nombre
if (($i==$nueva_zelanda) or ($i==$servia))
{
// Obtenemos datos para ponerlos en un array
$ranking = strip_tags($archivo[$i+1]);
$pais = strip_tags($archivo[$i+2]).' '.strip_tags($archivo[$i+3]);
$oro= strip_tags($archivo[$i+4]);
$plata = strip_tags($archivo[$i+5]);
$bronce = strip_tags($archivo[$i+6]);
$total = $oro+$plata+$bronce;
}
else
{
// Obtenemos datos para ponerlos en un array
$ranking = strip_tags($archivo[$i+1]);
$pais = strip_tags($archivo[$i+2]);
$oro= strip_tags($archivo[$i+3]);
$plata = strip_tags($archivo[$i+4]);
$bronce = strip_tags($archivo[$i+5]);
$total = $oro+$plata+$bronce;
}
// Crearemos un array asociativo
$paises = array("$i"=>
array("nombre"=>"$pais","ranking"=>"$ranking","oro"=>"$oro","plata"=>"$plata","bronce"=>"$bronce","total"=>"$total")
);
//////////////////////////////////////////////////////////
echo "
<tr>
<td>".$paises[$i][ranking]."</td>
<td>".$paises[$i][nombre]."</td>
<td>".$paises[$i][oro]."</td>
<td>".$paises[$i][plata]."</td>
<td>".$paises[$i][bronce]."</td>
<td>".$paises[$i][total]."</td>
</tr>
";
}
}
echo '</table>';
}
else
{
echo '<p>El URL indicado:<br />
<a href="'.$origen_url.'" title="'.$origen_url.'" target="_blank">'.$origen_url.'</a><br />
no se encuentra ya disponible, es posible que haya sido movido o borrado.</p>';
}
?>
Código PHP:
$array_pais = array("$pais"=>array("ranking"=>"$ranking","oro"=>"$oro","plata"=>"$plata","bronce"=>"$bronce","total"=>"$total"));
$array_pais[Estados Unidos];
Y después, esto ya no es tan necesario, poder tener ese array como global o algo así, pero esto es lo de menos.
Os estaría increiblemente agradecido, una ayudilla please.
Un saludo.