• Viernes 8 de Noviembre de 2024, 10:41

Autor Tema:  Trabajar Con Array  (Leído 1859 veces)

Gabi1708

  • Nuevo Miembro
  • *
  • Mensajes: 22
    • Ver Perfil
    • http://www.iesmg.es
Trabajar Con Array
« en: Domingo 16 de Diciembre de 2007, 15:55 »
0
Hola, buenas.

Tengo un archivo en el que he trabajado mucho, y me he quedado atrancado... Quería que ustedes, si no es molestia, me ayuden a salir del paso.

No les puedo poner el archivo entero porque son 1100 líneas, pero les dejaré la parte que nos interesa:
Código: Text
  1. <?php
  2.  
  3. // Obtengo el step
  4.   $step = (isset($HTTP_GET_VARS['step'])) ? $HTTP_GET_VARS['step'] : (isset($HTTP_POST_VARS['step']) ? $HTTP_POST_VARS['step'] : 0);
  5.   $steps = array(1, 2, 3, 4, 11, 12, 99);
  6. // Y compruebo si está en la lista
  7.   if (!in_array($step, $steps))
  8.   {
  9.     $step = 0;
  10.   }
  11.  
  12. // Esta es la versión del paquete
  13.   $version = '1.3.0';
  14. // Estas son las versiones que se pueden tener del paquete
  15.   $kmversions = array('RC1', '1.0.0', '1.1.0', '1.2.0', '1.3.0');
  16.  
  17. // Esta consulta busca la versión en la base de datos
  18.   $sql = "SELECT config_value
  19.       FROM kmorph_config
  20.       WHERE config_name = 'kmorph_version'";
  21.     if (!($result = $db->sql_query($sql)))
  22.     {
  23.       die("El script se detuvo ya que usted no dispone de la versión necesaria. Por favor lea el manual de instalación.");
  24.       exit;
  25.     }
  26.     $row = $db->sql_fetchrow($result);
  27. // Y por último lo grabo en una variable para no liarme más adelante
  28.     $kmorphver = $row['config_value'];
  29.  
  30. // Acciones según el step
  31. switch ($step)
  32. {
  33.   case 0:
  34. // Si la versión resultado es anterior/inexistente se termina la ejecución, si existe, se escribe el botón continuar.
  35.     if ( in_array($kmorphver, $kmversions) )
  36.     { ?>
  37.   <input type="hidden" value="12" name="step" />
  38.         <input type="submit" class="mainoption" value="<?php echo($langi['Continue']); ?>" name="submit_stp11" />
  39.     <?php
  40.     exit;
  41.     }
  42.   break;
  43.   case 12:
  44. //
  45. //
  46. // Explicación de lo que quiero hacer aquí fuera del código
  47. //
  48. //
  49.   break;
  50. }
  51.  
  52. ?>
  53.  
Como dije antes, no es el archivo completo, es una adaptación para que ustedes lo vean más claro.
Bueno, dejé marcado con comentarios (//) lo que va ocurriendo en cada caso, y, por último, el caso de que $step sea 12, que no se muy bien cómo hacer lo que quiero.
Como ven, esto es un script de actualización que estoy creando. Lo que quiero hacer en el caso de que se halla llegado al step 12 es llevar a cabo una serie de acciones, guardadas en otros archivos (update_RC1.php, update_1.0.0.php, update_1.1.0.php, etc), entonces quiero realizar ahí una inclusión ( include(lo_que_sea); ) para cada archivo desde la versión que tenga el usuario.

Quiero decir, que si el usuario tiene la versión 1.1.0, que incluya los archivos update_1.1.0.php, update_1.2.0.php y update_1.3.0.php.

Sé que se podría hacer con otro switch como este:
Código: Text
  1. switch($kmversion)
  2. {
  3. case '1.3.0':
  4. include('update_1.3.0.php');
  5. case '1.2.0':
  6. include('update_1.2.0.php');
  7. case '1.1.0':
  8. include('update_1.1.0.php');
  9. // [...]
  10. break;
  11. }
  12.  
Pero esto implicaría que cada versión nueva yo tenga que meterme a añadir un case al switch, cosa que realmente, con mi memoria, creo que no me voy a acordar...
Estaba buscamdo alguna forma de hacer esto buscando en el array la version que tiene y ejecutando lo que corresponda a esa version y a las posteriores.

Muchas gracias por adelantado. Saludos
Gabi1708, programador de PHP, XHTML, CSS y JavaScript. Novato en VB.NET.

-DriverOp-

  • Miembro activo
  • **
  • Mensajes: 81
    • Ver Perfil
Re: Trabajar Con Array
« Respuesta #1 en: Domingo 16 de Diciembre de 2007, 17:20 »
0
Veo que en $kmorphver tienes la cadena que se corresponde a una versión en particular y veo que los nombres de los archivos que quieres incluir contienen esa cadena, por lo tanto podrías hacer algo así en el case 12:
Código: Text
  1.  
  2. $nom_archivo = "update_".$kmorphver.".php";
  3. if (is_file($nom_archivo)) { include($nom_archivo); }
  4. else { echo "Error: ".$nom_archivo." no existe."; }
  5.  
  6.  

De esta forma, sospecho, cada vez que agregas una versión nueva lo haces a la base de datos (que es de donde toma valor $kmorphver) y debes agregar el archivo a ser incluido en el lugar adecuado, todo esto sin necesidad de modificar el código fuente.

O sea, tu problema es que tienes muchas cadenas que están "hardcodeadas" y por lo tanto no puedes agregar/quitar cosas sin modificar el código fuente que las usa. Mi sugerencia ayuda a palear este problema.

Gabi1708

  • Nuevo Miembro
  • *
  • Mensajes: 22
    • Ver Perfil
    • http://www.iesmg.es
Re: Trabajar Con Array
« Respuesta #2 en: Domingo 16 de Diciembre de 2007, 18:28 »
0
Muchísimas gracias. Me has sido de gran ayuda. Has conseguido encender la luz esa de las ideas, que a menudo pienso que está fundida :lol:

Al final modifiqué un poco el código que me diste para lograr lo deseado:
Código: Text
  1.   case 12:
  2.     // Convierto variables a números (ej:  1.3.0 -> 130)
  3.     $n_kmorphver = intval(str_replace('.', '', $kmorphver));
  4.     $n_version = intval(str_replace('.', '', $version));
  5.     foreach ($kmversions as $curr_ver)
  6.     {
  7.       $n_curr_ver = intval(str_replace('.', '', $curr_ver));
  8.      
  9.       // Compruebo si necesito hacer la actualización
  10.       if ( ($n_kmorphver <= $n_curr_ver) && ($n_curr_ver <= $n_version) )
  11.       {
  12.         $file = "update_".$curr_ver.".php";
  13.         if (is_file($file))
  14.         {
  15.           include($phpbb_root_path . 'install/updates/' . $file);
  16.         }
  17.         else
  18.         {
  19.           die ("Error: Su paquete o foro está corrupto. Por favor, diríjase al sitio oficial para recibir ayuda.$curr_ver");
  20.           exit;
  21.         }
  22.       }
  23.     }
  24.   break;
  25.  
Encontré la luz con lo que comentaste.

El fallito que tenía tu código es que sólo actualizaba una versión. Con lo que hice yo se encarga de ir actualizando versión por versión: 1.0.0 a 1.1.0, 1.1.0 a 1.2.0, etc

Muchas gracias. Saludos :)
Gabi1708, programador de PHP, XHTML, CSS y JavaScript. Novato en VB.NET.

-DriverOp-

  • Miembro activo
  • **
  • Mensajes: 81
    • Ver Perfil
Re: Trabajar Con Array
« Respuesta #3 en: Viernes 28 de Diciembre de 2007, 12:43 »
0
Very clever :D

irmay

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Trabajar Con Array
« Respuesta #4 en: Martes 22 de Enero de 2008, 17:23 »
0
Hola con los arreglos el problema que tengo es que no me funciona array_merge. Será q no uso bien los argumentos

<?php      
require '../conexion.inc.php';
      $sql="SELECT a.asignatura, b.descripcio,
      FROM  historico a  asignatura b
      WHERE (a.carnet = $carnet)";
      $result=mssql_query($sql);
      $row= mssql_fetch_array($result);
      echo "<font size=5 color='#ff0000'>Asignaturas Optativas de Ciencias Naturales</font>";   
      $selec = "SELECT A.asignatura, B.descripcio FROM historico A
      asignatura B  WHERE (A.carnet = $carnet)";
      $con2 = mssql_query($selec);
      $arr1 = mssql_fetch_array($con2);
      echo "<font size=5 color='#ff0000'>Asignaturas Optativas Arte</font>";   
      $selec2 = "SELECT A.asignatura, B.descripcio FROM historico A
      asignatura B WHERE (A.carnet = $carnet)";      
      $con3 = mssql_query($selec2);
      $arr2 = mssql_fetch_array($con3);        
      array_merge ($valida, $arr1);
      echo "valida ".$num1." arr1 ".$num2." arr2 ".$num3." arr3 ".$num4;
?>