Foros del Web » Programando para Internet » PHP »

Problemas con arrays

Estas en el tema de Problemas con arrays en el foro de PHP en Foros del Web. Buenos días, Tengo una aplicación en la que los usuarios van insertando registros a diario a través de un formulario. Lo que quiero es, a ...
  #1 (permalink)  
Antiguo 06/11/2013, 05:34
 
Fecha de Ingreso: abril-2011
Mensajes: 103
Antigüedad: 13 años
Puntos: 3
Problemas con arrays

Buenos días,

Tengo una aplicación en la que los usuarios van insertando registros a diario a través de un formulario. Lo que quiero es, a partir de un mes y un año dado, generar una tabla donde en vertical estén los usuarios, en horizontal los días del mes, y en la intersección de ambos indicar con un SI o un NO si ese día el usuario en concreto ha insertado registros.

En estos momento consigo generar la tabla con usuarios y días, pero en la intersección siempre obtengo el 'NO'
Código PHP:
<?php
    
$usuario 
= new usuario();
$cons $usuario->ObtenerConsultores();
        
    foreach(
$cons as $consultores) {
$consultor_no_report $consultores['Ident_consultor'];

$query2="Select calendario_dias.dia AS dia, consultores.consultor AS consultor from calendario_dias, consultores WHERE calendario_dias.mes = '$mes' AND dia NOT IN (SELECT DISTINCT trabajos.dia AS dias_report FROM trabajos INNER JOIN consultores ON trabajos.consultores_Ident_consultor = consultores.Ident_consultor WHERE mes = '$mes' AND ano = '$anos' AND (consultores.Ident_consultor) = '$consultor_no_report')AND (consultores.Ident_consultor) = '$consultor_no_report' AND (consultores.esconsultor) = '1' AND (consultores.reporte_habitual) = '1' AND ((consultores.f_fin)='' OR (consultores.f_fin) = '0000-00-00');";
echo 
$query2;

    
$consulta = new Consulta($query2);
   
    
$array=array();
    while(
$row_tabla $consulta->obtener_fila()) {//montar un array con el consultor como key
        
if(!array_key_exists($row_tabla['consultor'], $array)){
            
$array3[$row_tabla['consultor']]=array();
        }
        if(!
array_key_exists($row_tabla['dia'], $array)){ //dentro de cada array otro array con el mes como key
            
$array2[$row_tabla['consultor']][$row_tabla['dia']]=0;
        }}

    
$cuenta_tareas=array();//array para guardar dias
    
$salida=''//salida
    
foreach($array2 as $k=>$v){//crear cabecera de dias
        
foreach($v as $clave=>$valor){
            if(!
in_array($clave,$cuenta_tareas)){//si no ha salido
                
$cuenta_tareas[]=$clave;//la guardamos en el array y la mostramos
                
$salida.="<th>".$clave."</th>";
            }
        }
    }
    
$salida.='</tr><tr>';//cerrar cabecera


$query3="SELECT DISTINCT trabajos.dia AS dia FROM trabajos INNER JOIN consultores ON trabajos.consultores_Ident_consultor = consultores.Ident_consultor WHERE mes = '$mes' AND ano = '$anos' AND (consultores.Ident_consultor) = '$consultor_no_report';";
    
$consulta = new Consulta($query3);
    
$array4=array();
    while(
$row_tabla $consulta->obtener_fila()) {//montar un array con el consultor como key
            
$array4[]=($row_tabla['dia']+0);
    }
    foreach(
$array3 as $k=>$v){
$salida.="<tr>";
        
$salida.= "<td>"$k."</td>";//muestra el consultor

            
for($i=0;$i<count($cuenta_tareas);$i++){//recorre el array de cabeceras
        
        
                
if(in_array($cuenta_tareas[$i],$array4)){//si existe en la posicion actual mostramos el resultado
            
                        
$salida.="<td>SI</td>";
                    }else{
//si no existe ponemos celda vacía
                        
$salida.="<td>NO</td>";
        }
$salida.="</tr>";
    echo 
$salida;
    
?>
    </tr>
Muchas gracias y saludos
  #2 (permalink)  
Antiguo 06/11/2013, 06:11
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Respuesta: Problemas con arrays

Holas, portela85.

Te sugiero que para empezar, imprimas el contenido de cada array que vas llenando en tus consultas, especialmente el $cuenta_tareas, que es el cual te produce el "fallo". Disculpa no darte más opciones, pero sin saber qué datos estás obteniendo, es difícil saber si es problema de tus algoritmos, de los datos, o de qué otra cosa :s

Código PHP:
    // aca imprime el contenido:
    
print"<pre>"print_r($cuenta_tareas); print"</pre>";

    
$query3="SELECT DISTINCT trabajos.dia AS dia FROM trabajos INNER JOIN consultores ON trabajos.consultores_Ident_consultor = consultores.Ident_consultor WHERE mes = '$mes' AND ano = '$anos' AND (consultores.Ident_consultor) = '$consultor_no_report';"
Saludos!
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #3 (permalink)  
Antiguo 07/11/2013, 06:39
 
Fecha de Ingreso: abril-2011
Mensajes: 103
Antigüedad: 13 años
Puntos: 3
Respuesta: Problemas con arrays

Hola Quinqui,
muchas gracias por tu respuesta. El contendio de $cuenta_tareas es el correcto.

El problema creo que lo tengo al definir y llenar el siguiente array

Código PHP:
Ver original
  1. $query3="SELECT DISTINCT trabajos.dia AS dia FROM trabajos INNER JOIN consultores ON trabajos.consultores_Ident_consultor = consultores.Ident_consultor WHERE mes = '$mes' AND ano = '$anos' AND (consultores.Ident_consultor) = '$consultor_no_report';";
  2. echo $query3;
  3.  
  4.     $consulta = new Consulta($query3);
  5.  
  6.     $array4=array();
  7.     while($row_tabla1 = $consulta->obtener_fila()) {//montar un array con los díascomo key
  8.         if(!array_key_exists($row_tabla1['dia'], $array4)){
  9.             $array4[$row_tabla['dia']]=array();
  10.         }
  11.     }

La consulta es correcta pero no el llenado del array... alguna sugerencia?

Saludos y muchas gracias!
  #4 (permalink)  
Antiguo 07/11/2013, 08:59
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Respuesta: Problemas con arrays

Mmh, ahora que lo mencionas, lo que veo es que estás asignando a cada elemento del array, otro array, y luego más abajo, comparas estos elementos contra un valor que no es array (el día del mes, creo):
Código PHP:
 if(!array_key_exists($row_tabla1['dia'], $array4)){
  
$array4[$row_tabla['dia']]=array();
 } 
Código PHP:
if(in_array($cuenta_tareas[$i],$array4)) 
Te sugiero que te decidas a cómo realizar la asignación de valores, para ejecutar la comparación pertinente, ya que ahora estás mezclando peras con manzanas ^^

Por ejemplo, si quieres mantener la comparación como está, debieras modificar la asignación de $array4, a algo así:
Código PHP:
 if(!in_array($row_tabla1['dia'], $array4)){
  
$array4[] = $row_tabla['dia'];
 } 
Ahora, si quieres mantener la forma que tienes asignada (creando claves, no valores) del $array4, tendrás que modificar la comparación:
Código PHP:
if(array_key_exists($cuenta_tareas[$i],$array4)) 

Saludos!
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #5 (permalink)  
Antiguo 07/11/2013, 10:19
 
Fecha de Ingreso: abril-2011
Mensajes: 103
Antigüedad: 13 años
Puntos: 3
Respuesta: Problemas con arrays

Hola Quinqui,

muchas gracias nuevamente por tu ayuda!

El primer problema que tengo es que no consigo llenar $array4 con los valores extraidos de la consulta $query3. Si hago print_r($array4); no obtengo resultados, mientras que si ejecuto la consulta directamente en el gestor de BD sí que obtengo el resultado deseado.

Código PHP:
$query3="SELECT DISTINCT trabajos.dia AS dia FROM trabajos INNER JOIN consultores ON trabajos.consultores_Ident_consultor = consultores.Ident_consultor WHERE mes = '$mes' AND ano = '$anos' AND (consultores.Ident_consultor) = '$consultor_no_report';";

    
$consulta3 = new Consulta($query3);

    
$array4=array();
    while(
$row_tabla1 $consulta3->obtener_fila()) {//montar un array con los díascomo key
        
if(!in_array($row_tabla1['dia'], $array4)){
    
$array4[] = $row_tabla1['dia'];        }
    } 
Saludos y Gracias
  #6 (permalink)  
Antiguo 07/11/2013, 10:23
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Respuesta: Problemas con arrays

Pero cuál consulta estás ejecutando en tu gestor de BD: la que tienes tú o la que generas en la web? Me refiero a que hagas:
Código PHP:
print $query3
También aprovecha de hacer un:
Código PHP:
var_dump($consulta3); 
por si acaso... :P

Fíjate si está bien formada la query de la web, copiándola de la pantalla y ejecutándola en tu gestor.
Saludos!
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #7 (permalink)  
Antiguo 07/11/2013, 10:35
 
Fecha de Ingreso: abril-2011
Mensajes: 103
Antigüedad: 13 años
Puntos: 3
Respuesta: Problemas con arrays

Sí, copio la consulta, la ejecuto en el gestor y obtengo el resultado deseado. Sin embargo cuando esos valores quiero asignarlos al array y hago el print_r, me muestra el array completamente vacío... no consigo entenderlo!
  #8 (permalink)  
Antiguo 08/11/2013, 08:03
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Respuesta: Problemas con arrays

Entonces te toca hacer un print dentro del while:
Código PHP:
while($row_tabla1 $consulta3->obtener_fila()) {//montar un array con los díascomo key
       
print_r($row_tabla1); print"<br/>\n"
       if(!
in_array($row_tabla1['dia'], $array4)){
    
$array4[] = $row_tabla1['dia'];        }
    } 
Saludos!
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #9 (permalink)  
Antiguo 08/11/2013, 14:06
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Problemas con arrays

<saludos>
Recien me adjunto al topic, pero no se, hay algo que no me cuaja, o bueno, tal vez porque yo no lo hago de ese modo, pregunto algo


$array=array();
while(
$row_tabla = $consulta->obtener_fila()) {//montar un array con el consultor como key
if(!array_key_exists($row_tabla['consultor'], $array)){
$array3[$row_tabla['consultor']]=array();
}
if(!
array_key_exists($row_tabla['dia'], $array)){ //dentro de cada array otro array con el mes como key
$array2[$row_tabla['consultor']][$row_tabla['dia']]=0;
}


En esta sección, porque en el primer if se revisa si existe el consultor
dentro de $array si como vemos, $array siempre está vacio?
Mismo caso para los días

Sin embargo, está interesante lo que planteas, y si una vez comentes
lo que he preguntado y el tema no es por ese lado, entonces te animo a
que agregues los scripts de creación de tablas y porque no poblado
de data, pues sin tabla y data, es algo a ojimetro lo que en mi caso hago

</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #10 (permalink)  
Antiguo 11/11/2013, 07:40
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Respuesta: Problemas con arrays

Holas, mortiprogramador. Tienes razón. La verdad es que portela85 tiene que revisar bien su código mediante depuraciones, ya que su sintaxis no tiene errores pero muchas partes no tienen lógica, y eso es lo que tiene que dilucidar y corregir...
Saludos!
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #11 (permalink)  
Antiguo 18/11/2013, 05:31
 
Fecha de Ingreso: abril-2011
Mensajes: 103
Antigüedad: 13 años
Puntos: 3
Respuesta: Problemas con arrays

Muchas gracias de nuevo mortiprogramador y quinqui por vuestros comentarios.

#mortiprogramador, lo que pretendo con el if es ir llenando el $array no si este está vacio, si no si no existe el Consultor o el día dentro del array.

Voy pegando la estructura de la BDTabla Consultores
Código:
CREATE TABLE `consultores` (
  `Ident_consultor` int(11) NOT NULL auto_increment,
  `consultor` varchar(50) character set utf8 NOT NULL,
  `f_inicio` date NOT NULL,
  `f_fin` date default NULL,
  `facturacion` varchar(15) character set utf8 NOT NULL,
  `tarifa` int(11) default NULL,
  `costesalarial` int(11) default NULL,
  `usuario` varchar(20) NOT NULL,
  `password` varchar(20) NOT NULL,
  `admin` tinyint(1) default NULL,
  `codconsultor` varchar(3) NOT NULL,
  `cliente` tinyint(1) NOT NULL,
  `esconsultor` tinyint(1) default NULL,
  `reporte_habitual` tinyint(1) NOT NULL,
  `escoordinador` tinyint(1) default NULL,
  `correo` varchar(100) NOT NULL,
  PRIMARY KEY  (`Ident_consultor`)
) ENGINE=MyISAM  DEFAULT CHARSET=ucs2 AUTO_INCREMENT=119 ;

INSERT INTO `consultores` VALUES (66, 'Daniel Paniagua', '2012-03-28', '0000-00-00', '', 0, 0, 'dpaniagua', 'dpaniagua', 0, '008', 0, 1, 1, 0, '');
INSERT INTO `consultores` VALUES (67, 'David Garcia Rodriguez', '2012-03-28', '0000-00-00', '', 0, 0, 'dgarcia', 'dgarcia', 0, '066', 0, 1, 1, 0, '');
INSERT INTO `consultores` VALUES (68, 'Dragos Manea', '2012-03-28', '0000-00-00', '', 0, 0, 'dmanea', 'dmanea', 0, '032', 0, 1, 1, 0, '');
INSERT INTO `consultores` VALUES (69, 'Fernando Cana', '2012-03-28', '0000-00-00', '', 0, 0, 'fcana', 'fcana', 0, '011', 0, 1, 1, 0, '');
Tabla Trabajos
Código:
CREATE TABLE `trabajos` (
  `idtrabajo` int(11) NOT NULL auto_increment,
  `indi` text NOT NULL,
  `grupo` varchar(10) NOT NULL,
  `cliente` smallint(6) NOT NULL,
  `ot` int(11) NOT NULL,
  `proyecto` smallint(6) NOT NULL,
  `interlocutor` smallint(6) NOT NULL,
  `f_inicio` date NOT NULL,
  `f_fin` date NOT NULL,
  `f_reporte` date NOT NULL,
  `dia` int(11) NOT NULL,
  `mes` int(11) default NULL,
  `ano` int(11) NOT NULL,
  `semana` int(11) NOT NULL,
  `descripcion` text NOT NULL,
  `cantidad2` smallint(6) NOT NULL,
  `cantidad` double NOT NULL,
  `escalado` double NOT NULL,
  `escaladoK25` double NOT NULL,
  `descripcionescalado` text,
  `tiempo_real` double NOT NULL,
  `preciototal` float NOT NULL,
  `preciototalK25` float NOT NULL,
  `pago_actuacion` tinyint(1) default NULL,
  `nocturna` tinyint(1) default NULL,
  `comentarios` text,
  `status_idstatus` smallint(6) NOT NULL,
  `descripcionstatus` text,
  `actividades_Id_actividad` smallint(6) NOT NULL,
  `idactiv_tall` int(11) NOT NULL,
  `consultores_Ident_consultor` int(11) NOT NULL,
  `pagohoras` tinyint(1) default NULL,
  `horas` smallint(6) default NULL,
  `comentariosclientes` text NOT NULL,
  `estadocliente` varchar(20) NOT NULL,
  `comentarios_altran` text,
  PRIMARY KEY  (`idtrabajo`),
  KEY `dia` (`dia`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=25245 ;
Gracias y Saludos!!
  #12 (permalink)  
Antiguo 18/11/2013, 05:33
 
Fecha de Ingreso: abril-2011
Mensajes: 103
Antigüedad: 13 años
Puntos: 3
Respuesta: Problemas con arrays

Datos de trabajos
Código MySQL:
Ver original
  1. INSERT INTO `trabajos` VALUES (25067, 'IO_MIND_72_2013-10-30', 'IO_MIND', 15, 1011111736, 170, 9, '2013-10-30', '2013-10-30', '2013-11-04', 30, 10, 2013, 43, 'Revisión vano PO0161PM Cluster H007GAL11', 0, 2, 1, 1, '', 1.5, 136.24, 136.24, 0, 0, '', 3, '', 0, 87, 72, 0, 1, '', '', '');
  2. INSERT INTO `trabajos` VALUES (25068, 'IO_MIND_72_2013-10-30', 'IO_MIND', 15, 1011111736, 170, 9, '2013-10-30', '2013-10-30', '2013-11-04', 30, 10, 2013, 43, 'Revisión vano PO0162PM Cluster H007GAL11', 0, 2, 1, 1, '', 1.5, 136.24, 136.24, 0, 0, '', 3, '', 0, 87, 72, 0, 1, '', '', '');
  3. INSERT INTO `trabajos` VALUES (25069, 'IO_MIND_72_2013-10-30', 'IO_MIND', 15, 1011108448, 170, 9, '2013-10-30', '2013-10-30', '2013-11-04', 30, 10, 2013, 43, 'Revisión vano SS0070PM Cluster A023PVA10', 0, 2, 1, 1, '', 1.5, 136.24, 136.24, 0, 0, '', 3, '', 0, 87, 72, 0, 1, '', '', '');
  4. INSERT INTO `trabajos` VALUES (25070, 'IO_MIND_72_2013-10-30', 'IO_MIND', 15, 1011112492, 170, 9, '2013-10-30', '2013-10-30', '2013-11-04', 30, 10, 2013, 43, 'Revisión vano MX1061PM Cluster H109MAD01', 0, 2, 1, 1, '', 1.5, 136.24, 136.24, 0, 0, '', 3, '', 0, 87, 72, 0, 1, '', '', '');
  5. INSERT INTO `trabajos` VALUES (25071, 'IO_MIND_72_2013-10-30', 'IO_MIND', 15, 1011098024, 170, 9, '2013-10-30', '2013-10-30', '2013-11-04', 30, 10, 2013, 43, 'Revisión vano BI0024PM Cluster H012PVA10', 0, 2, 1, 1, '', 1.5, 136.24, 136.24, 0, 0, '', 3, '', 0, 87, 72, 0, 1, '', '', '');
  6. INSERT INTO `trabajos` VALUES (25072, 'IO_MIND_72_2013-10-30', 'IO_MIND', 15, 1010989032, 170, 9, '2013-10-30', '2013-10-30', '2013-11-04', 30, 10, 2013, 43, 'Revisión vano MX0499PM Cluster H014MAD60', 0, 2, 1, 1, '', 1.5, 136.24, 136.24, 0, 0, '', 3, '', 0, 87, 72, 0, 1, '', '', '');
  7. INSERT INTO `trabajos` VALUES (25073, 'IO_MIND_72_2013-10-31', 'IO_MIND', 15, 1011098024, 170, 9, '2013-10-31', '2013-10-31', '2013-11-04', 31, 10, 2013, 43, 'Revisión vano BI0034PM Cluster H012PVA10', 0, 2, 1, 1, '', 1.5, 136.24, 136.24, 0, 0, '', 3, '', 0, 87, 72, 0, 1, '', '', '');
  8. INSERT INTO `trabajos` VALUES (25074, 'IO_MIND_72_2013-10-31', 'IO_MIND', 15, 1011098024, 170, 9, '2013-10-31', '2013-10-31', '2013-11-04', 31, 10, 2013, 43, 'Revisión vano BI0035PM Cluster H012PVA10', 0, 2, 1, 1, '', 1.5, 136.24, 136.24, 0, 0, '', 3, '', 0, 87, 72, 0, 1, '', '', '');
  9. INSERT INTO `trabajos` VALUES (25075, 'IO_MIND_72_2013-10-31', 'IO_MIND', 15, 1011126610, 170, 9, '2013-10-31', '2013-10-31', '2013-11-04', 31, 10, 2013, 43, 'Revisión vano ZX0070PM Cluster H018ARA10', 0, 2, 1, 1, '', 1.5, 136.24, 136.24, 0, 0, '', 3, '', 0, 87, 72, 0, 1, '', '', '');
  10. INSERT INTO `trabajos` VALUES (25076, 'IO_WDM_72_2013-10-31', 'IO_WDM', 15, 0, 170, 9, '2013-10-31', '2013-10-31', '2013-11-04', 31, 10, 2013, 43, 'Acceso a equipo ZX0370P1', 0, 1, 1, 1, '', 1, 5, 5, 0, 0, '', 3, '', 0, 88, 72, 0, 1, '', '', '');
  11. INSERT INTO `trabajos` VALUES (25077, 'IO_MIND_72_2013-10-31', 'IO_MIND', 15, 1011126610, 170, 9, '2013-10-31', '2013-10-31', '2013-11-04', 31, 10, 2013, 43, 'Revisión vano ZX0071PM Cluster H018ARA10', 0, 2, 1, 1, '', 1.5, 136.24, 136.24, 0, 0, '', 3, '', 0, 87, 72, 0, 1, '', '', '');
  12. INSERT INTO `trabajos` VALUES (25078, 'IO_MIND_72_2013-10-31', 'IO_MIND', 15, 1011126610, 170, 9, '2013-10-31', '2013-10-31', '2013-11-04', 31, 10, 2013, 43, 'Revisión vano ZX0072PM Cluster H018ARA10', 0, 2, 1, 1, '', 1.5, 136.24, 136.24, 0, 0, '', 3, '', 0, 87, 72, 0, 1, '', '', '');
  13. INSERT INTO `trabajos` VALUES (25079, 'IO_MIND_72_2013-10-31', 'IO_MIND', 15, 1011098024, 170, 9, '2013-10-31', '2013-10-31', '2013-11-04', 31, 10, 2013, 43, 'Revisión vano BI0037PM Cluster H012PVA10', 0, 2, 1, 1, '', 1.5, 136.24, 136.24, 0, 0, '', 3, '', 0, 87, 72, 0, 1, '', '', '');
  14. INSERT INTO `trabajos` VALUES (25080, 'IO_MIND_72_2013-10-31', 'IO_MIND', 15, 1011098024, 170, 9, '2013-10-31', '2013-10-31', '2013-11-04', 31, 10, 2013, 43, 'Revisión vano BI0038PM Cluster H012PVA10', 0, 2, 1, 1, '', 1.5, 136.24, 136.24, 0, 0, '', 3, '', 0, 87, 72, 0, 1, '', '', '');
  15. INSERT INTO `trabajos` VALUES (25081, 'IO_MIND_72_2013-10-31', 'IO_MIND', 15, 1011112491, 170, 9, '2013-10-31', '2013-10-31', '2013-11-04', 31, 10, 2013, 43, 'Revisión vano MX1059PM Cluster H109MAD01', 0, 2, 1, 1, '', 1.5, 136.24, 136.24, 0, 0, '', 3, '', 0, 87, 72, 0, 1, '', '', '');
  16. INSERT INTO `trabajos` VALUES (25082, 'IO_MIND_72_2013-10-31', 'IO_MIND', 15, 0, 170, 9, '2013-10-31', '2013-10-31', '2013-11-04', 31, 10, 2013, 43, 'CONFIGURACIÓN IPLINE GESTIÓN H120MAD01', 0, 1, 1, 1, '', 1.5, 68.12, 68.12, 0, 0, '', 3, '', 0, 86, 72, 0, 1, '', '', '');
  17. INSERT INTO `trabajos` VALUES (25083, 'GRDR_73_2013-11-04', 'GRDR', 16, 0, 130, 13, '2013-11-04', '2013-11-04', '2013-11-04', 4, 11, 2013, 44, 'OT-VF 0810017-05-01 V3 B-LLACUNA5', 0, 1, 2, 2, '', 1, 36.52, 36.52, 0, 0, 'VF SOLICITO AUMENTAR EN 2 LTS MAS TRAS HABER YA SACADO EL PT. HUBO QUE PEDIR TCIS Y SACAR NUEVA VERSION DEL PT.', 3, '', 0, 61, 73, 0, 1, '', '', '');
  18. INSERT INTO `trabajos` VALUES (25084, 'GRDR_94_2013-11-04', 'GRDR', 15, 0, 179, 11, '2013-11-04', '2013-11-04', '2013-11-04', 4, 11, 2013, 44, 'PIR de preconfiguración IT-xDSL-13-1316', 0, 1, 1, 1, '', 1, 18.26, 18.26, 0, 0, 'Realización de PIR de preconfiguración + solicitud de apertura de TP. ', 3, '', 0, 61, 94, 0, 1, '', '', '');
  19. INSERT INTO `trabajos` VALUES (25085, 'GRDR_94_2013-11-04', 'GRDR', 15, 0, 179, 11, '2013-11-04', '2013-11-04', '2013-11-04', 4, 11, 2013, 44, 'PIR de preconfiguración IT-xDSL-13-1317', 0, 1, 1, 1, '', 1, 18.26, 18.26, 0, 0, 'Realización de PIR de preconfiguración + solicitud de apertura de TP. ', 3, '', 0, 61, 94, 0, 1, '', '', '');

Calendario_dias

Código MySQL:
Ver original
  1. CREATE TABLE `calendario_dias` (
  2.   `mes` int(2) NOT NULL,
  3.   `dia` int(2) NOT NULL,
  4.   PRIMARY KEY  (`mes`,`dia`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  6. INSERT INTO `calendario_dias` VALUES (10, 1);
  7. INSERT INTO `calendario_dias` VALUES (10, 2);
  8. INSERT INTO `calendario_dias` VALUES (10, 3);
  9. INSERT INTO `calendario_dias` VALUES (10, 4);
  10. INSERT INTO `calendario_dias` VALUES (10, 5);
  11. INSERT INTO `calendario_dias` VALUES (10, 6);
  12. INSERT INTO `calendario_dias` VALUES (10, 7);
  13. INSERT INTO `calendario_dias` VALUES (10, 8);
  14. INSERT INTO `calendario_dias` VALUES (10, 9);
  15. INSERT INTO `calendario_dias` VALUES (10, 10);
  16. INSERT INTO `calendario_dias` VALUES (10, 11);
  17. INSERT INTO `calendario_dias` VALUES (10, 12);
  18. INSERT INTO `calendario_dias` VALUES (10, 13);
  19. INSERT INTO `calendario_dias` VALUES (10, 14);
  20. INSERT INTO `calendario_dias` VALUES (10, 15);
  21. INSERT INTO `calendario_dias` VALUES (10, 16);
  22. INSERT INTO `calendario_dias` VALUES (10, 17);
  23. INSERT INTO `calendario_dias` VALUES (10, 18);
  24. INSERT INTO `calendario_dias` VALUES (10, 19);
  25. INSERT INTO `calendario_dias` VALUES (10, 20);
  26. INSERT INTO `calendario_dias` VALUES (10, 21);
  27. INSERT INTO `calendario_dias` VALUES (10, 22);
  28. INSERT INTO `calendario_dias` VALUES (10, 23);
  29. INSERT INTO `calendario_dias` VALUES (10, 24);
  30. INSERT INTO `calendario_dias` VALUES (10, 25);
  31. INSERT INTO `calendario_dias` VALUES (10, 26);
  32. INSERT INTO `calendario_dias` VALUES (10, 27);
  33. INSERT INTO `calendario_dias` VALUES (10, 28);
  34. INSERT INTO `calendario_dias` VALUES (10, 29);
  35. INSERT INTO `calendario_dias` VALUES (10, 30);
  36. INSERT INTO `calendario_dias` VALUES (10, 31);

Gracias y Saludos!
  #13 (permalink)  
Antiguo 21/11/2013, 09:51
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Problemas con arrays

<saludos>
Bueno, pues te cuento, ya monté toda la bd,
y copie de nuevo el código inicial del post,
pero al parecer tiene problemas, inicialmente
de cierre de for y foreach al final, pero al
arreglar estos ahora da otras novedades

Así que por ahora lo que hice a nivel de código fue reemplazar la clase de usuario (que no la tengo) y la de consulta por conexiones directas
por un array con los Ident_consultor que me enviaste en la tabla de usuarios (66,67,68,69)
Las variables $mes = 11 y $ano = 2013

Así el asunto, al recorrer $query2 para cada uno de estos, ninguno trae registros
Luego en el while encontré que lo cierras pero no lo abres, en cuyo caso agregué la llave de inicio,
sin embargo pues al no haber datos, en ningún momento entra al while y por ende hasta este punto $array2 y $array3 no tienen valor

Luego viene el foreach de $array2, pero como en este caso no tiene valores, al intentar hacer el foreach, se va a totear,
por esto puse un if antes donde pregunto si $array2 tiene sizeof, y si es así, que en este caso si entre

Paso siguiente es $query3, que también se hace por cada consultor (por ende todo esto va en el foreach inicial),
pero igualmente trae 0 registros, y por ende el while de $row_tabla no se va a ejecutar

Finalmente, tenemos el foreach de $array3, pero como este array tampoco obtiene valor al recorrer $query2, por ende
al tratar de recorrerlo va a dar error, por ende agregué if para el sizeof, y pues por ende
se concluye que con la data que me enviaste no hay datos de ningún tipo que coincidan con alguno de los querys

Entonces pues por ahora te comparto las mejoras que hice a nivel de código, obviamente tienes que acoplarlas a lo tuyo porque
como verás yo hice reemplazos en secciones para los temas de conexión a bd y eso, y a nivel visual de los querys e identación

Prueba sin embargo con esto en tu ambiente pues tal vez ya con toda la data que tienes,
el tema se comporte mejor

Código PHP:
Ver original
  1. <?php
  2.  
  3.     // $usuario = new usuario();
  4.     // $cons = $usuario->ObtenerConsultores();
  5.     $cons = array(
  6.     array('Ident_consultor'=>'66'),
  7.     array('Ident_consultor'=>'67'),
  8.     array('Ident_consultor'=>'68'),
  9.     array('Ident_consultor'=>'69')
  10.     );
  11.        
  12.     $conn = mysql_connect('localhost','root','Mtiqsecofr06');
  13.     mysql_select_db('test');
  14.     $mes = 11;
  15.     $anos = 2013;
  16.    
  17.     foreach($cons as $consultores)
  18.     {
  19.         $consultor_no_report = $consultores['Ident_consultor'];
  20.         $query2="SELECT calendario_dias.dia AS dia, consultores.consultor AS consultor
  21.                FROM calendario_dias, consultores
  22.                WHERE calendario_dias.mes = '$mes'
  23.                AND dia NOT IN
  24.                    (
  25.                        SELECT DISTINCT trabajos.dia AS dias_report
  26.                        FROM trabajos INNER JOIN consultores ON trabajos.consultores_Ident_consultor = consultores.Ident_consultor
  27.                        WHERE mes = '$mes' AND ano = '$anos' AND (consultores.Ident_consultor) = '$consultor_no_report'
  28.                    )
  29.                AND (consultores.Ident_consultor) = '$consultor_no_report'
  30.                AND (consultores.esconsultor) = '1'
  31.                AND (consultores.reporte_habitual) = '1'
  32.                AND ((consultores.f_fin)=''
  33.                OR (consultores.f_fin) = '0000-00-00')
  34.                ;";
  35.                
  36.         // echo $query2;
  37.         $rs = mysql_query($query2);
  38.         // echo 'registros '.mysql_num_rows($rs);
  39.  
  40.  
  41.         // $consulta = new Consulta($query2);
  42.        
  43.         $array=array();
  44.         // while($row_tabla = $consulta->obtener_fila()) {//montar un array con el consultor como key
  45.         while( $row_tabla = mysql_fetch_array($rs) )
  46.         {
  47.             if(!array_key_exists($row_tabla['consultor'], $array)){
  48.                 $array3[$row_tabla['consultor']]=array();
  49.             }
  50.             if(!array_key_exists($row_tabla['dia'], $array)){ //dentro de cada array otro array con el mes como key
  51.                 $array2[$row_tabla['consultor']][$row_tabla['dia']]=0;
  52.             }
  53.         }        
  54.    
  55.    
  56.  
  57.         $cuenta_tareas=array();//array para guardar dias
  58.         $salida=''; //salida
  59.         if( sizeof($array2) )
  60.         {
  61.             foreach($array2 as $k=>$v){//crear cabecera de dias
  62.                 foreach($v as $clave=>$valor){
  63.                     if(!in_array($clave,$cuenta_tareas)){//si no ha salido
  64.                         $cuenta_tareas[]=$clave;//la guardamos en el array y la mostramos
  65.                         $salida.="<th>".$clave."</th>";
  66.                     }
  67.                 }
  68.             }
  69.         }
  70.         $salida.='</tr><tr>';//cerrar cabecera
  71.  
  72.  
  73.         $query3="SELECT DISTINCT trabajos.dia AS dia
  74.                FROM trabajos
  75.                INNER JOIN consultores ON trabajos.consultores_Ident_consultor = consultores.Ident_consultor
  76.                WHERE mes = '$mes'
  77.                AND ano = '$anos'
  78.                AND (consultores.Ident_consultor) = '$consultor_no_report'
  79.                ;";
  80.         // $consulta = new Consulta($query3);
  81.         $rs = mysql_query($query2);
  82.         // echo 'registros '.mysql_num_rows($rs);
  83.        
  84.        
  85.         $array4=array();
  86.         // while($row_tabla = $consulta->obtener_fila()) {//montar un array con el consultor como key
  87.         while($row_tabla = mysql_fetch_array($rs)) {//montar un array con el consultor como key
  88.                 $array4[]=($row_tabla['dia']+0);
  89.         }
  90.    
  91.         if( sizeof($array3) )
  92.         {
  93.             foreach($array3 as $k=>$v){
  94.                 $salida.="<tr>";
  95.                 $salida.= "<td>". $k."</td>";//muestra el consultor
  96.  
  97.                 for($i=0;$i<count($cuenta_tareas);$i++){//recorre el array de cabeceras
  98.                     if(in_array($cuenta_tareas[$i],$array4))//si existe en la posicion actual mostramos el resultado
  99.                         $salida.="<td>SI</td>";
  100.                     else //si no existe ponemos celda vacía
  101.                         $salida.="<td>NO</td>";
  102.                 }
  103.                            
  104.                 $salida.="</tr>";
  105.                 echo $salida;
  106.             }
  107.         }
  108.     }
  109.     ?>
  110.     </tr>

</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Etiquetas: arrays, formulario, registro, select, tabla, usuarios
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 10:19.