Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/08/2004, 16:00
Avatar de Covids0020
Covids0020
 
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 7 meses
Puntos: 1
Arrays multidimensionales... dentro de bucles.

Hola de nuevo, buff, no sé ni como explicar esto, tengo un problemilla con arrays y creo que lo mismo lo hago muy complicado.

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]);
      
$orostrip_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]);
      
$orostrip_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>'
;
}
?>
Lo que me gustaría tener sería algo así:
Código PHP:
$array_pais = array("$pais"=>array("ranking"=>"$ranking","oro"=>"$oro","plata"=>"$plata","bronce"=>"$bronce","total"=>"$total")); 
Dentro del bucle no tiene ninguna utilidad, ya que tendría que llamar a cada indice de pais o crear un bucle para recorrer el array con paises y no va fuera del bucle que es donde me interesaría tener algo como:

$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.
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org

Última edición por Covids0020; 28/08/2004 a las 16:12