Foros del Web » Programando para Internet » PHP »

Optimizar el recorrido de un Arrays PHP

Estas en el tema de Optimizar el recorrido de un Arrays PHP en el foro de PHP en Foros del Web. hola, que tal? Espero que todos estén bien. Escribo para ver si me pueden ayudar en este problema. El problema es que necesito representar los ...
  #1 (permalink)  
Antiguo 08/08/2011, 07:06
Avatar de eliza_ralves  
Fecha de Ingreso: junio-2009
Ubicación: Caracas
Mensajes: 126
Antigüedad: 15 años, 4 meses
Puntos: 2
Optimizar el recorrido de un Arrays PHP

hola, que tal? Espero que todos estén bien. Escribo para ver si me pueden ayudar en este problema.

El problema es que necesito representar los resultados de dos arreglos, esté me lo hace pero hay un detalle, cuando el valor del mismo tiene valor cero, no me lo representa, y justo cuando haya un valor distinto de cero me lo "pega" cuando no debería.

Si no se me ha entendido bien, le va la descrición gráfica:

1.- tengo un rango de fechas : fecha inicio 2/08/2011 y fecha final 25/11/2011
2.- Desde el 2/08/2011 al 7/09/2011 tengo asignados valores distintos de cero.
3.- Desde el 8/09/2011 al 10/10/2011 tengo valores igual a cero (que se tienen que representar)
4.- Desde el 11/10/2011 al 25/11/2011 hay valores distintos de cero.

Lo que me hace en esto momentos, es obviarme el rango donde el valor es distinto de cero, y lo que hace es empatar la fecha del 7/09/2011 con la del 08/09/2011, cosa que no debería.

Hice el esfuerzo de darle miles de vueltas al asunto... pero no logro solventarlo. el código es el siguiente:

Código PHP:
<?php

/**
* Obtención de las Horas/Hombre para los Proyectos y Actividades , además 
* de definir los elementos a evaluar dichas horas (Proyecto y Actividad)
 */
        
$calculo calcularHoras($tipo_grafico$dis_select$ofic_select$fechaInicio$fechaFinal$rango);
        
$calculoP $calculo[0];
        
$calculoA  $calculo[1]; 

/**
*  $encabezado 
* Generación del los meses y el año correspondiente, de todos 
* los elementos contenidos dentro del rango de fechas para 
* visualizarlo en el gráfico 
 */
$encabezadoobtenerEncabezadosGrafico($fechaInicio$fechaFinal);

/*
* Recorrido para la visualización de los elementos contenidos 
* dentro del rango de fechas para visualizarlo en el gráfico 
*/
 
for ($i 1$i <= count($encabezado); $i++){ 

    
/**
      * $auxM
      * Variable que contendrá el Mes
      */
      
$auxM $encabezado[$i][0];
                                        
     
/**
      * $anio
      * Variable que contendrá el Año
      */                                        
       
$anio $encabezado[$i][1];
 
    
/** 
     *  $auxHP 
     * Horas/Hombre de Proyectos
      * Si en el recorrido del arreglo de proyectos posee valor, 
      * se asigna las horas a dichos proyectos. Sino posee valor,
      * se le asigna valor "cero" a las horas correspondiente al mismo
      */
          
if (isset($calculoP[$i]) && isset($calculoP[$i]["Horas"]))
                
$auxHP$calculoP[$i]["Horas"];
          else
               
$auxHP 0;
                                    
      
/** 
       *  $auxHA 
       * Horas/Hombre de Actividades
       * Si en el recorrido del arreglo de actividades posee valor, 
       * se asigna las horas a dichas actividades. Sino posee valor,
       * se le asigna valor "cero" a las horas correspondiente al mismo
       */
           
if (isset($calculoA[$i]) && isset($calculoA[$i]["Horas"]))
                 
$auxHA$calculoA[$i]["Horas"];
           else
                  
$auxHA0;
?>
Código HTML:
 <tr>
      <th><?php echo $auxM; ?></th>
      <td><?php echo $auxHP; ?></td>
      <td><?php echo $auxHA; ?></td>
      </tr> 
Código PHP:
<?php
     
//cierre del for
 
?>
Espero alguien me pueda ayudar a resolver este problema.

GRACIAS!

PD: cuando llamo a la función "calcularHoras" obtengo todos las horas dentro de un rango y el filtrado de datos correspondiente desde la BD, y la graficación es por meses.
__________________
“El mayor enemigo del conocimiento no es la ignorancia, sino la ilusión del conocimiento”— Stephen Hawking
  #2 (permalink)  
Antiguo 08/08/2011, 09:03
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 8 meses
Puntos: 253
Respuesta: Optimizar el recorrido de un Arrays PHP

Buenas.

Representar, empatar, pegar...? No te lo tomes a mal, pero no he entenido ni lo que pretendes ni lo que has hecho, ni qué significan las fechas, ni qué valores llevan los arrays, ni nada de nada.

Y veo que, como yo, muchas personas, pues el post tiene más de 20 visitas y ni una respuesta. Intenta explicarte mejor, porque si no, es imposible que podamos hacer nada.

Un saludo y a ver si podemos hacer algo con tu problema.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #3 (permalink)  
Antiguo 08/08/2011, 09:26
Avatar de eliza_ralves  
Fecha de Ingreso: junio-2009
Ubicación: Caracas
Mensajes: 126
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: Optimizar el recorrido de un Arrays PHP

Bueno, bueno intentaré explicarme mejor.

dado un rango de fechas dado por una fecha inicial y final, debo representar las horas/hombre asignadas tanto para proyectos y actividades.

Según lo mostrado en el código, recorro dichos arreglos (proyectos y actividades), para que me lo pueda representar en una gráfica estadística.

El problema, es al momento de graficar dichos valores, por ejemplo, si dentro de la fecha inicio 2/08/2011 y fecha final 25/11/2011, tengo algún mes que tenga valor "0", no me grafica en ese mes el valor "0", sino que me a graficar el mes siguiente (el cual tiene valor distinto de "0") y lo va a colocar en el mes que supuestamente no hay ninguna asignación, es decir, se corre ese mes.

Para ponerlo mas gráfico:


Agosto (50)
Septiembre (34)
Octubre (0)
Noviembre (100)


Cuando grafica hace lo siguiente:

Agosto (50)
Septiembre (34)
Octubre (cualquier valor o me repite el valor de Noviembre - se dan los dos casos) --> lo que debería graficar es "0"
Noviembre (100)

Espero haber aclarado el problema y me puedan ayudar.
__________________
“El mayor enemigo del conocimiento no es la ignorancia, sino la ilusión del conocimiento”— Stephen Hawking
  #4 (permalink)  
Antiguo 08/08/2011, 10:35
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 8 meses
Puntos: 253
Respuesta: Optimizar el recorrido de un Arrays PHP

Probablemente sea tema de cómo se extraen los datos, nos puedes poner el código de calcularHoras(). Como veo, el resultado de esta función es un array que contiene dos arrays dentro, el primero es para proyectos (supongo que es la P de $calculoP) y el segundo para actividades (A de $calculoA).

Además de ponernos el código, si puede ser, hacle un var_dump o un print_r a los dos arrays que te he comentado antes ($calculoA y $calculoP) y nos muestras el resultado, creo que los tiros van por cómo vienen los arrays no por el código de después (que parece estar bien).

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #5 (permalink)  
Antiguo 08/08/2011, 12:16
Avatar de eliza_ralves  
Fecha de Ingreso: junio-2009
Ubicación: Caracas
Mensajes: 126
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: Optimizar el recorrido de un Arrays PHP

Hola vgonga1986, estuve viendo el código a raíz de los print_r de los arreglos y si me los está devolviendo bien.

La confunsión viene de mi parte, ya que cuando hago la consulta lo estoy realizando con los totales del mes y no de las semanas, es decir, tengo asignado a una persona 2 proyectos, las cuales el proyecto 1 = 30 horas y el proyecto 2 = 10 horas, lo que suma 40 horas, esas cuarenta horas es lo que tomo para hacer los grfaficos.

Independientemente, si un proyecto en determinada fecha no posee horas, pero en el otro si, me dá como resultado el total.

Disculpa por tal confusión, y gracias por tu ayuda!

__________________
“El mayor enemigo del conocimiento no es la ignorancia, sino la ilusión del conocimiento”— Stephen Hawking
  #6 (permalink)  
Antiguo 09/08/2011, 12:29
Avatar de eliza_ralves  
Fecha de Ingreso: junio-2009
Ubicación: Caracas
Mensajes: 126
Antigüedad: 15 años, 4 meses
Puntos: 2
Exclamación Respuesta: Optimizar el recorrido de un Arrays PHP

Hola! que tal? Te escribo porque hice una prueba nueva y me trae como resultado, el problema anterior.

En una primera vista, si, me habia confundido, pero ahora me doy cuenta que tiene esa falla ()

será que alguien me puede ayudar?

Los resultados correctos son los siguientes:
enero 160
febrero 160
marzo 48
abril 0
abril 0
junio 0
julio 0
agosto 162
sep 160
oct 200
nov 0

Lo que me hace es esto:
enero 320
febrero 48
marzo 162
abril 160
mayo 200
junio 0

Me los corre
__________________
“El mayor enemigo del conocimiento no es la ignorancia, sino la ilusión del conocimiento”— Stephen Hawking
  #7 (permalink)  
Antiguo 09/08/2011, 14:51
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 8 meses
Puntos: 253
Respuesta: Optimizar el recorrido de un Arrays PHP

Si la cosa es del trocito de código que tienes ahí, hazle un print_r a los tres arrays ($calculoP, $calculoA y $encabezado) y pásamelos, a ver que siga el flujo de datos y si podemos sacar la duda.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #8 (permalink)  
Antiguo 09/08/2011, 17:47
Avatar de eliza_ralves  
Fecha de Ingreso: junio-2009
Ubicación: Caracas
Mensajes: 126
Antigüedad: 15 años, 4 meses
Puntos: 2
Mensaje Respuesta: Optimizar el recorrido de un Arrays PHP

Hola, ahora no estoy en el trabajo que es donde tengo montado todo, pero te dejo las funciones, tanto la del càlculo de horas como la que tengo para crear el arreglo encabezado:

calcularHoras (query de la bd, aquí hago el filtro de los datos, para éste caso sòlo mostrarè sòlo una parte)

Código PHP:
function calcularHoras($tipo_grafico$dis_select$ofic_select$fechaInicio$fechaFinal$rango){

    
$horasP = array();
    
$horasA = array();
    
    
$link conectarBD ();

    
    
$anualInicioAux $rango[0];
    
$mesActual  $rango[1]; 
    
$anualFinalAux $rango[2];
    
$mesFinalAux $rango[3];
      
    
/** 
     * Verifica si se eligió la opción de disciplina 'Cualquiera' en 
     * la lista correspondiente del formulario, en cuyo caso no se toma filtro por 
     * disciplina
     */
    
if($dis_select == 'Todas'){
    
        
$consultDisc " AND 1=1";
        
    }else{
    
        
/**
         * Si se incluyó, se realiza la consulta por dicha disciplina
         */
        
$consultDisc " AND E.Nombre_Disciplina = '" $dis_select"' ";
    
    }
    
    
/** 
     * Verifica si se elegió la opción de la oficina 'Cualquiera' en 
     * la lista correspondiente del formulario, en cuyo caso no se toma filtro 
     * por oficina
     */
    
if($ofic_select == 'Todas'){
    
        
$consultOfic " AND 1=1";
        
    }else{

        
/**
         * Si se incluyó, se realiza la consulta por dicha disciplina
         */
        
$consultOfic " AND E.Codigo_Oficina = '" $ofic_select "' ";
    
    }
    

    
/**   
     * Cosulta para cuando el Tipo de Gráfico elegido es General
     * el cual incluye los Proyectos y las Actividades
     */  
   
if($tipo_grafico == 'G'){
        
        
$queryP =   "SELECT Ano_Semana, Mes_Semana, SUM(P.Cantidad_Horas) AS Horas
                    FROM SPO2_Participa P, SPO2_Empleado E, SPO2_Evento EV
                    WHERE P.Codigo_Empleado = E.Codigo
                    AND P.Codigo_Evento = EV.Codigo" 
                    
$consultDisc $consultOfic .
                    AND EV.Tipo = 'P'
                    AND (      
                            (P.Ano_Semana > '" 
$anualInicioAux "' )
                         OR ((P.Ano_Semana = '" 
$anualInicioAux "') AND (P.Mes_Semana >= '" $mesActual "'))
                        )
                    AND (      
                            (P.Ano_Semana < '" 
$anualFinalAux .  "' )
                         OR ((P.Ano_Semana = '" 
$anualFinalAux .  "') AND (P.Mes_Semana <= '" $mesFinalAux ."'))
                        )
                    GROUP BY Ano_Semana, Mes_Semana
                    ORDER BY Ano_Semana, Mes_Semana"
;

       
$resultP odbc_exec($link$queryP)
            or die(
"Fallo en la ejecución de la consulta sobre la Base de 
                          Datos. Favor Notificar a Soporte Tecnico: " 
odbc_errormsg());

    
$numero_filasP odbc_num_rows $resultP );  
        
        for (
$i 1$i <= $numero_filasP$i++) {
        
            
$rowP odbc_fetch_array($resultP);
            
$horasP[$i] = $rowP;
            
        }
    
        
$queryA =   "SELECT Ano_Semana, Mes_Semana, SUM(P.Cantidad_Horas) AS Horas
                    FROM SPO2_Participa P, SPO2_Empleado E, SPO2_Evento EV
                    WHERE P.Codigo_Empleado = E.Codigo
                    AND P.Codigo_Evento = EV.Codigo" 
                    
$consultDisc $consultOfic .
                    AND EV.Tipo = 'A'
                    AND (      
                            (P.Ano_Semana > '" 
$anualInicioAux "' )
                         OR ((P.Ano_Semana = '" 
$anualInicioAux "') AND (P.Mes_Semana >= '" $mesActual "'))
                        )
                    AND (      
                            (P.Ano_Semana < '" 
$anualFinalAux .  "' )
                         OR ((P.Ano_Semana = '" 
$anualFinalAux .  "') AND (P.Mes_Semana <= '" $mesFinalAux ."'))
                        )
                    GROUP BY Ano_Semana, Mes_Semana
                    ORDER BY Ano_Semana, Mes_Semana"
;

       
$resultA odbc_exec($link$queryA)
            or die(
"Fallo en la ejecución de la consulta sobre la Base de 
                          Datos. Favor Notificar a Soporte Tecnico: " 
odbc_errormsg());

        
$numero_filasA odbc_num_rows $resultA );  
            
        for (
$i 1$i <= $numero_filasA$i++) {
        
            
$rowA odbc_fetch_array($resultA);
            
$horasA[$i] = $rowA;
        }
    
        
/**
         * Cierra la conexión abierta con la BD
         */ 
        
desconectarBD_Pronostico($link);
        
        return array(
$horasP$horasA);
        
    }
    

obtenerEncabezadosGrafico (que es lo que utilizo cómo base para formar un arreglo que contiene todos los meses contenidos dentro de la fecha escogida y así formar el eje x del grafico, es decir, los meses)

Código PHP:
/**
 * Función: obtenerEncabezadosGrafico
 *
 * @param string $desde
 * @param string $hasta
 * @return array $anualInicioAux|$mesActual|$anualFinalAux|$mesFinalAux
 *
 * Descripción: Devuelve los meses y el año, dado un rango de fechas para
 * utilizarlo en la visualización de los gráficos.
 */

  
function obtenerEncabezadosGrafico($desde$hasta){
    
    
$encabezados = array();
    
$i 1;

    
/**
     * Conversión de las fechas al formato Mes/Día/Año
     * @example: $fecha= '02/08/2011'
     *           $fechaAux= '08/02/2011'
     */    
    
$desdeAux convertirFecha_MDA($desde);
    
$hastaAux convertirFecha_MDA($hasta);

    
/**
     * Tratamiento para la obtención de la Semana, Mes y Año de la fecha de inicio
     */    
    
$semanaInicial obtenerNumSemana($desdeAux);
    
$mesInicial    obtenerNumMes($desdeAux);
    
$anualInicio   obtenerNumeroAnual($desdeAux);

    if(
$semanaInicial == && $mesInicial == 12)
        
$anualInicioAux $anualInicio 1;
    else if((
$semanaInicial == 52 || $semanaInicial == 53) && $mesInicial == 1)
            
$anualInicioAux $anualInicio 1;
         else
            
$anualInicioAux $anualInicio;
            
    
$mesActual obtenerNumMesDeSemana($semanaInicial$anualInicioAux);

    
/**
     * Tratamiento para la obtención de la Semana, Mes y Año de la fecha de final
     */ 
    
$semanaFinal obtenerNumSemana($hastaAux);
    
$mesFinal    obtenerNumMes($hastaAux);
    
$anualFinal  obtenerNumeroAnual($hastaAux);

    if(
$semanaFinal == && $mesFinal == 12)
        
$anualFinalAux $anualFinal 1;
    else if(
$semanaFinal == 52 && $mesFinal == 1)
            
$anualFinalAux $anualFinal 1;
        else
            
$anualFinalAux $anualFinal;
            
    
$mesFinalAux obtenerNumMesDeSemana($semanaFinal$anualFinalAux);

    
/**
     * Se registra en la primera posición del arreglo, el Mes y Año de la fecha inicial
     */ 
    
$encabezados[$i] = array($mesActual$anualInicioAux);
    
$mesActual++;
    
$i++;
    
    if(
$semanaInicial == 52)
        
$semanaActual 1;
    else
        
$semanaActual $semanaInicial 1;
        
    
$anualActual $anualInicioAux;

    
/**
     * Recorrido para obtener el Mes y Año de los valores que se encuentran dentro
     * de la fecha inicial y fecha final
     */ 
    
while($anualActual <= $anualFinalAux){
        if(
$anualActual == $anualFinalAux){
            
            while(
$mesActual $mesFinalAux){
                
$encabezados[$i] = array($mesActual$anualActual);
                
$i++;
                
$mesActual++;
            }
            
            
/**
             * Condicional para cuando el Mes y Año sean iguales a la fecha final, es decir,
             * se haya llegado al tope del rango, dado por la fecha final
             */
            
if($mesActual == $mesFinalAux){
                
$encabezados[$i] = array($mesFinalAux$anualFinal);
                
$i++;
            }
        
        } else {
        
            while(
$mesActual <= 12){
                
$encabezados[$i] = array($mesActual$anualActual);
                
$i++;
                
$mesActual++;
            }  
        }
        
$mesActual=1;
        
$anualActual++;
    }
    return 
$encabezados;

Además lo que me arroja la BD es la siguiente:
Ano_Semana/Mes_Semana/Numero_Semana/Horas
2020 1 2 40
2020 1 3 40
2020 1 4 40
2020 1 5 40
2020 1 6 40
2020 1 7 40
2020 1 8 40
2020 1 9 40
2020 3 10 40
2020 3 11 8
2020 8 32 32
2020 8 33 40
2020 8 34 40
2020 8 35 40
2020 9 36 40
2020 9 37 40
2020 9 38 40
2020 9 39 40
2020 10 40 40
2020 10 41 40
2020 10 42 40
2020 10 43 40
2020 10 44 40

Mañana estaré colocando el contenido de los arreglos

Saludos vgonga1986!
__________________
“El mayor enemigo del conocimiento no es la ignorancia, sino la ilusión del conocimiento”— Stephen Hawking
  #9 (permalink)  
Antiguo 10/08/2011, 06:54
Avatar de eliza_ralves  
Fecha de Ingreso: junio-2009
Ubicación: Caracas
Mensajes: 126
Antigüedad: 15 años, 4 meses
Puntos: 2
Exclamación Respuesta: Optimizar el recorrido de un Arrays PHP

Hola, buenos días!

Aqui te tengo el flujo de los datos:


Mes Encabezado en 1 es --> 01
Año Encabezado en 1 es --> 2020

Mes Calculo Proyecto en 1 es --> 3
Año Calculo Proyecto en 1 es --> 1
Horas --> Ene 112

Mes Calculo Actividad en 1 es --> 1
Año Calculo Actividad en 1 es --> 1
Horas --> Ene 344

-------

Mes Encabezado en 2 es --> 2
Año Encabezado en 2 es --> 2020

Mes Calculo Proyecto en 2 es --> 4
Año Calculo Proyecto en 2 es --> 1
Horas --> Feb 200

Mes Calculo Actividad en 2 es --> 3
Año Calculo Actividad en 2 es --> 1 Feb 32

-------

Mes Encabezado en 3 es --> 3
Año Encabezado en 3 es --> 2020

Mes Calculo Proyecto en 3 es --> 5
Año Calculo Proyecto en 3 es --> 1
Horas --> Mar 160

Mes Calculo Actividad en 3 es --> 8
Año Calculo Actividad en 3 es --> 1
Horas --> Mar 152

------

Mes Encabezado en 4 es --> 4
Año Encabezado en 4 es --> 2020

Mes Calculo Proyecto en 4 es --> 6
Año Calculo Proyecto en 4 es --> 1
Horas --> Abr 160

Mes Calculo Actividad en 4 es --> 9
Año Calculo Actividad en 4 es --> 1
Horas --> Abr 160

-----

Mes Encabezado en 5 es --> 5
Año Encabezado en 5 es --> 2020

Mes Calculo Proyecto en 5 es --> 7
Año Calculo Proyecto en 5 es --> 1
Horas --> May 200

Mes Calculo Actividad en 5 es --> 10
Año Calculo Actividad en 5 es --> 1
Horas --> May 200

------

Mes Encabezado en 6 es --> 6
Año Encabezado en 6 es --> 2020

Mes Calculo Proyecto en 6 es --> 8
Año Calculo Proyecto en 6 es --> 1
Horas --> Jun 8

Mes Calculo Actividad en 6 es -->
Año Calculo Actividad en 6 es -->
Horas --> Jun 0

--------

Mes Encabezado en 7 es --> 7
Año Encabezado en 7 es --> 2020

Mes Calculo Proyecto en 7 es -->
Año Calculo Proyecto en 7 es -->
Horas --> Jul 0

Mes Calculo Actividad en 7 es -->
Año Calculo Actividad en 7 es -->
Horas --> Jul 0

----------

Mes Encabezado en 8 es --> 8
Año Encabezado en 8 es --> 2020

Mes Calculo Proyecto en 8 es -->
Año Calculo Proyecto en 8 es -->
Horas --> Ago 0

Mes Calculo Actividad en 8 es -->
Año Calculo Actividad en 8 es -->
Horas --> Ago 0

--------

Mes Encabezado en 9 es --> 9
Año Encabezado en 9 es --> 2020

Mes Calculo Proyecto en 9 es -->
Año Calculo Proyecto en 9 es -->
Horas --> Sep 0

Mes Calculo Actividad en 9 es -->
Año Calculo Actividad en 9 es -->
Horas --> Sep 0

--------

Mes Encabezado en 10 es --> 10
Año Encabezado en 10 es --> 2020

Mes Calculo Proyecto en 10 es -->
Año Calculo Proyecto en 10 es -->
Horas --> Oct 0

Mes Calculo Actividad en 10 es -->
Año Calculo Actividad en 10 es -->
Horas --> Oct 0

-------

Mes Encabezado en 11 es --> 11
Año Encabezado en 11 es --> 2020

Mes Calculo Proyecto en 11 es -->
Año Calculo Proyecto en 11 es -->
Horas --> Nov 0

Mes Calculo Actividad en 11 es -->
Año Calculo Actividad en 11 es -->
Horas --> Nov 0

-------

Mes Encabezado en 12 es --> 12
Año Encabezado en 12 es --> 2020

Mes Calculo Proyecto en 12 es -->
Año Calculo Proyecto en 12 es -->
Horas --> 0 (se le asigna 0 por el condicional)

Mes Calculo Actividad en 12 es -->
Año Calculo Actividad en 12 es -->
Horas --> 0 (se le asigna 0 por el condicional)

Espero me puedas ayudar, gracias!
__________________
“El mayor enemigo del conocimiento no es la ignorancia, sino la ilusión del conocimiento”— Stephen Hawking
  #10 (permalink)  
Antiguo 10/08/2011, 07:00
Avatar de eliza_ralves  
Fecha de Ingreso: junio-2009
Ubicación: Caracas
Mensajes: 126
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: Optimizar el recorrido de un Arrays PHP

Hice esta comparación adicicional:

Código PHP:

$auxM 
$encabezado[$i][0];
$anio $encabezado[$i][1];
                                        
$mesCalculoP$calculoP[$i]["Mes_Semana"];
$anoCalculoP$anio==$calculoP[$i]["Ano_Semana"];
$mesCalculoA$calculoA[$i]["Mes_Semana"];
$anoCalculoA$anio==$calculoA[$i]["Ano_Semana"];
                                        
    if ( isset(
$calculoP[$i]) && isset($calculoP[$i]["Horas"]) && ($mesCalculoP==$auxM) && ($anoCalculoP==$anio))
           
                  
$auxHP$calculoP[$i]["Horas"];
    else
                   
$auxHP 0;
                                         

   if ( isset(
$calculoA[$i]) && isset($calculoA[$i]["Horas"]) && ($mesCalculoA==$auxM) && ($anoCalculoA==$anio))
     
                    
$auxHA$calculoA[$i]["Horas"];  
   else
                      
$auxHA0
Sólo me imprime la primera posición de Actividades
__________________
“El mayor enemigo del conocimiento no es la ignorancia, sino la ilusión del conocimiento”— Stephen Hawking
  #11 (permalink)  
Antiguo 10/08/2011, 08:47
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 8 meses
Puntos: 253
Respuesta: Optimizar el recorrido de un Arrays PHP

No entiendo eso, haz lo siguiente. Debajo de esta línea inserta las otras tres que te paso:
Código PHP:
Ver original
  1. $encabezado= obtenerEncabezadosGrafico($fechaInicio, $fechaFinal);
  2. print_r($calculoP);
  3. print_r($calculoA);
  4. print_r($encabezado);

Y me pegas aquí lo que sea que imprime eso.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #12 (permalink)  
Antiguo 10/08/2011, 08:59
Avatar de eliza_ralves  
Fecha de Ingreso: junio-2009
Ubicación: Caracas
Mensajes: 126
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: Optimizar el recorrido de un Arrays PHP

Aqui están los resultados vgonga1986:

CalcularP
Array (
[1] => Array ( [Ano_Semana] => 2020 [Mes_Semana] => 3 [Horas] => 112 )
[2] => Array ( [Ano_Semana] => 2020 [Mes_Semana] => 4 [Horas] => 200 )
[3] => Array ( [Ano_Semana] => 2020 [Mes_Semana] => 5 [Horas] => 160 )
[4] => Array ( [Ano_Semana] => 2020 [Mes_Semana] => 6 [Horas] => 160 )
[5] => Array ( [Ano_Semana] => 2020 [Mes_Semana] => 7 [Horas] => 200 )
[6] => Array ( [Ano_Semana] => 2020 [Mes_Semana] => 8 [Horas] => 8 ) )

CalcularA
Array (
[1] => Array ( [Ano_Semana] => 2020 [Mes_Semana] => 1 [Horas] => 344 )
[2] => Array ( [Ano_Semana] => 2020 [Mes_Semana] => 3 [Horas] => 32 )
[3] => Array ( [Ano_Semana] => 2020 [Mes_Semana] => 8 [Horas] => 152 )
[4] => Array ( [Ano_Semana] => 2020 [Mes_Semana] => 9 [Horas] => 160 )
[5] => Array ( [Ano_Semana] => 2020 [Mes_Semana] => 10 [Horas] => 200 ) )

Encabezado
Array (
[1] => Array ( [0] => 01 [1] => 2020 )
[2] => Array ( [0] => 2 [1] => 2020 )
[3] => Array ( [0] => 3 [1] => 2020 )
[4] => Array ( [0] => 4 [1] => 2020 )
[5] => Array ( [0] => 5 [1] => 2020 )
[6] => Array ( [0] => 6 [1] => 2020 )
[7] => Array ( [0] => 7 [1] => 2020 )
[8] => Array ( [0] => 8 [1] => 2020 )
[9] => Array ( [0] => 9 [1] => 2020 )
[10] => Array ( [0] => 10 [1] => 2020 )
[11] => Array ( [0] => 11 [1] => 2020 )
[12] => Array ( [0] => 12 [1] => 2020 ) )
__________________
“El mayor enemigo del conocimiento no es la ignorancia, sino la ilusión del conocimiento”— Stephen Hawking
  #13 (permalink)  
Antiguo 10/08/2011, 09:53
Avatar de eliza_ralves  
Fecha de Ingreso: junio-2009
Ubicación: Caracas
Mensajes: 126
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: Optimizar el recorrido de un Arrays PHP

Estoy intentando hacer esta comparación:

Código PHP:
    if ( isset($calculoP[$i]) && isset($calculoP[$i]["Horas"])){
          if ((
$calculoP[$i]["Mes_Semana"] == $encabezado[$i][0]) && ($calculoP[$i]["Ano_Semana"] == $encabezado[$i][1]))

                    
$auxHP$calculoP[$i]["Horas"];
            else
                    
$auxHP0;
            }
   else 
           
$auxHP0

Pero no me hace el filtrado correctamente.
__________________
“El mayor enemigo del conocimiento no es la ignorancia, sino la ilusión del conocimiento”— Stephen Hawking
  #14 (permalink)  
Antiguo 10/08/2011, 09:58
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 8 meses
Puntos: 253
Respuesta: Optimizar el recorrido de un Arrays PHP

Vale, ves, así mucho más sencillo.

Tu bucle for itera sobre el array encabezado, que tiene todos los valores del año, desde $i=1 hasta $i=12. Y luego llamas a los otros dos arrays pensando que también tienen todos los valores, ya que el isset lo haces sobre el valor del array en la posición $i. Obviamente, los arrays no tienen los mismos valores, luego no te vale así.

La idea es que tienes que buscar dentro del array por el contenido, no por el índice. Te pongo un ejemplo rápido que lo entiendes bien, para la primera iteración de tu bucle tienes lo siguiente:
for ($i = 1; $i <= count($encabezado); $i++) {
Código:
- $i = 1
- $encabezado[$i] = Array ( [0] => 01 [1] => 2020 )
    - $encabezado[$i][0] = 01
    - $encabezado[$i][1] = 2020
- $calcularA[$i] = Array ( [Ano_Semana] => 2020 [Mes_Semana] => 1 [Horas] => 344 )
    - $calcularA[$i]['Ano_Semana'] = 2020
    - $calcularA[$i]['Mes_Semana'] = 1
    - $calcularA[$i]['Horas'] = 344
- $calcularP[$i] = Array ( [Ano_Semana] => 2020 [Mes_Semana] => 3 [Horas] => 112 )
    - $calcularP[$i]['Ano_Semana'] = 2020
    - $calcularP[$i]['Mes_Semana'] = 3
    - $calcularP[$i]['Horas'] = 112
Luego, no puedes sumar las horas de $calcularP[$i]['Horas'] con las de $calcularA[$i]['Horas'], porque estás sumando las de Enero de calcularA con las de marzo de calcularP.

No sé si me sigues. Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #15 (permalink)  
Antiguo 10/08/2011, 10:24
Avatar de eliza_ralves  
Fecha de Ingreso: junio-2009
Ubicación: Caracas
Mensajes: 126
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: Optimizar el recorrido de un Arrays PHP

Sip, si te sigo, por eso hice esto:

Código PHP:

    
if (( $calculoP[$i]["Mes_Semana"] == $encabezado[$i][0]) && ($calculoP[$i]["Ano_Semana"] == $encabezado[$i][1])) 
          
$auxHP$calculoP[$i]["Horas"];
    else
         
$auxHP0
Que si el valor el valor del cálculo de proyecto es igual al que posee encabezados, asignarle el valor que tiene el arreglo de proyecto. Sino, asígnarle 0.

pero nada.

Intente en vez de For, ponerle While ..... pero se guinda.
__________________
“El mayor enemigo del conocimiento no es la ignorancia, sino la ilusión del conocimiento”— Stephen Hawking
  #16 (permalink)  
Antiguo 10/08/2011, 10:36
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 8 meses
Puntos: 253
Respuesta: Optimizar el recorrido de un Arrays PHP

No te vale, tienes que hacer un for que recorra los arrays de actividades y proyectos, dentro de cada iteración del bucle exterior, porque la comparación la haces sólo con el $i que tengas en ese momento. Lo que tienes que hacer es recorrer todo el array hasta que encuentres el año y el mes correspondiente, y sólo en ese momento sumar.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #17 (permalink)  
Antiguo 10/08/2011, 11:16
Avatar de eliza_ralves  
Fecha de Ingreso: junio-2009
Ubicación: Caracas
Mensajes: 126
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: Optimizar el recorrido de un Arrays PHP

Gracias vgonga1986! intentaré lo que me dices!

Saludos !!

Gracias!!
__________________
“El mayor enemigo del conocimiento no es la ignorancia, sino la ilusión del conocimiento”— Stephen Hawking
  #18 (permalink)  
Antiguo 10/08/2011, 11:19
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 8 meses
Puntos: 253
Respuesta: Optimizar el recorrido de un Arrays PHP

Te lo voy a pasar, porque estoy a 15 minutos de salir del trabajo y no quiero dejar este tema ni un día más, pero que no sirva de precedente ;)
Código PHP:
Ver original
  1. for ($i = 1; $i <= count($encabezado); $i++){
  2.    $month = $encabezado[$i][0];
  3.    $year = $encabezado[$i][1];
  4.  
  5.    $hoursP = 0;
  6.    for ($j = 1; $j <= count($calculoP); j++) {
  7.       if (($calculoP[$j]['Ano_Semana'] == $year) && ($calculoP[$j]['Mes_Semana']) == $month)) {
  8.          $hoursP = $calculoP[$j]['Horas'];
  9.       }
  10.    }
  11.  
  12.    $hoursA = 0;
  13.    for ($j = 1; $j <= count($calculoA); j++) {
  14.       if (($calculoA[$j]['Ano_Semana'] == $year) && ($calculoA[$j]['Mes_Semana']) == $month)) {
  15.          $hoursA = $calculoA[$j]['Horas'];
  16.       }
  17.    }
  18.    
  19.    // Aquí tienes para la iteración $i, el mes $month y el año $year en $hoursP las horas de $calculoP (ó 0 si esa fecha no está en dicho array) y en $hoursA las horas de $calculoA (ó 0 si esa fecha no está en dicho array)
  20. }

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #19 (permalink)  
Antiguo 10/08/2011, 14:08
Avatar de eliza_ralves  
Fecha de Ingreso: junio-2009
Ubicación: Caracas
Mensajes: 126
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: Optimizar el recorrido de un Arrays PHP

acabo de ver tu post, wao! estaba haciendo lo mismo, pero le agregaba la opción

else
$auxHP=0;

cosa que no me terminaba de dar, además no inicializaba dicha variable. :(

coye pero MIL MILLONES de GRACIAS por ayudarme!

vgonga1986
__________________
“El mayor enemigo del conocimiento no es la ignorancia, sino la ilusión del conocimiento”— Stephen Hawking

Etiquetas: arrays, recorrido, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:29.