Foros del Web » Programando para Internet » PHP »

Contar valores de un arreglo multidimensional por llaves (keys)

Estas en el tema de Contar valores de un arreglo multidimensional por llaves (keys) en el foro de PHP en Foros del Web. Saludos para todos los usuario de Foros del Web, tengo esta rutina de código en PHP, y quisiera que me orienten en esto. La leyenda ...
  #1 (permalink)  
Antiguo 14/08/2009, 17:42
Avatar de rfadgrmm  
Fecha de Ingreso: junio-2009
Mensajes: 74
Antigüedad: 15 años, 5 meses
Puntos: 1
Pregunta Contar valores de un arreglo multidimensional por llaves (keys)

Saludos para todos los usuario de Foros del Web, tengo esta rutina de código en PHP, y quisiera que me orienten en esto. La leyenda para esta consulta es la siguiente:

Pasajeros:
ADT = Adulto, CHD = Niño, INF = Infante, SEN = Mayor

Habitaciones:
SGL = Simple, DBL = Doble, TPL = Triple, CDL = Cuadruple

Tengo este primer ejemplo de arreglo generado por PHP : (Tengo 3 Adultos y 1 Niño en 2 Habitaciones Dobles)
Código PHP:
$distribucion[4][1]["DBL"] = "ADT";
$distribucion[4][2]["DBL"] = "ADT";
$distribucion[4][3]["DBL"] = "ADT";
$distribucion[4][4]["DBL"] = "CHD";

$distribucion[5][1]["DBL"] = "ADT";
$distribucion[5][2]["DBL"] = "ADT";
$distribucion[5][3]["DBL"] = "ADT";
$distribucion[5][4]["DBL"] = "CHD";

echo 
"<pre>";
print_r($distribucion);
echo 
"</pre>"
Al imprimir, me muestra esto;
Código HTML:
Array
(
    [4] => Array
        (
            [1] => Array
                (
                    [DBL] => ADT
                )

            [2] => Array
                (
                    [DBL] => ADT
                )

            [3] => Array
                (
                    [DBL] => ADT
                )

            [4] => Array
                (
                    [DBL] => CHD
                )

        )

    [5] => Array
        (
            [1] => Array
                (
                    [DBL] => ADT
                )

            [2] => Array
                (
                    [DBL] => ADT
                )

            [3] => Array
                (
                    [DBL] => ADT
                )

            [4] => Array
                (
                    [DBL] => CHD
                )

        )

)
Aquí tengo un segundo ejemplo, algo similar: (Tengo 6 Adultos y 1 Niño en 2 Habitaciones Dobles y 1 Habitación Triple)
Código PHP:
$distribucion[10][1]["DBL"] = "ADT";
$distribucion[10][2]["DBL"] = "ADT";
$distribucion[10][3]["DBL"] = "ADT";
$distribucion[10][4]["DBL"] = "ADT";
$distribucion[10][5]["TPL"] = "ADT";
$distribucion[10][6]["TPL"] = "ADT";
$distribucion[10][7]["TPL"] = "CHD";

echo 
"<pre>";
print_r($distribucion);
echo 
"</pre>"
Así como su impresión:
Código HTML:
Array
(
    [10] => Array
        (
            [1] => Array
                (
                    [DBL] => ADT
                )

            [2] => Array
                (
                    [DBL] => ADT
                )

            [3] => Array
                (
                    [DBL] => ADT
                )

            [4] => Array
                (
                    [DBL] => ADT
                )

            [5] => Array
                (
                    [TPL] => ADT
                )

            [6] => Array
                (
                    [TPL] => ADT
                )

            [7] => Array
                (
                    [TPL] => CHD
                )

        )

)
Lo que deseo hacer es una distribución de pasajeros por habitaciones, generando finalmente esta serie de arreglos.

Como pueden ver es un arreglo multidimensional, el primer índice se refiere a un grupo ó grupos alojados en una base de datos, el segundo índice lo creé por existir duplicidad en las claves("DBL", "TPL", etc.) y el tercer índice es la leyenda de la habitación. Ahora el detalle es que deseo contar cuantos "Pasajeros" distribuidos hay por cada "Habitación" (según la leyenda escrita líneas arriba).

Deseo llegar a esto:

Primer arreglo:

Grupo 4: Habitación DBL = 3 ADT, Habitación DBL = 1 CHD
Grupo 5: Habitación DBL = 3 ADT, Habitación DBL = 1 CHD


Segundo arreglo:

Grupo 10: Habitación DBL = 4 ADT, Habitación TPL = 2 ADT, 1 CHD

Agradezco la atención y todas las respuestas y formas posibles para resolver esta consulta, muchas gracias.
  #2 (permalink)  
Antiguo 14/09/2009, 22:29
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Contar valores de un arreglo multidimensional por llaves (keys)

Hola
Bueno, propongo esto aunque el código me parece algo extenso, debe
haber un mejor modo pero pues ando corto de inspiración

Espero te sirva

Saludos

Código php:
Ver original
  1. <?php
  2.  
  3. $distribucion[4][1]["DBL"] = "ADT";
  4. $distribucion[4][2]["DBL"] = "ADT";
  5. $distribucion[4][3]["DBL"] = "ADT";
  6. $distribucion[4][4]["DBL"] = "CHD";
  7.  
  8. $distribucion[5][1]["DBL"] = "ADT";
  9. $distribucion[5][2]["DBL"] = "ADT";
  10. $distribucion[5][3]["DBL"] = "ADT";
  11. $distribucion[5][4]["DBL"] = "CHD";
  12.  
  13. $distribucion[10][1]["DBL"] = "ADT";
  14. $distribucion[10][2]["DBL"] = "ADT";
  15. $distribucion[10][3]["DBL"] = "ADT";
  16. $distribucion[10][4]["DBL"] = "ADT";
  17. $distribucion[10][5]["TPL"] = "ADT";
  18. $distribucion[10][6]["TPL"] = "ADT";
  19. $distribucion[10][7]["TPL"] = "CHD";
  20.  
  21.  
  22. foreach($distribucion as $idgrupo=>$posiciones){
  23.     //Variables que manejaran el total de cada habitacion
  24.     $totalSGL = 0;
  25.     $totalDBL = 0;
  26.     $totalTPL = 0;
  27.     $totalCDL = 0;
  28.     //Total de INF por cada tipo de habitacion
  29.     $totalSGLINF = 0;
  30.     $totalDBLINF = 0;
  31.     $totalTPLINF = 0;
  32.     $totalCDLINF = 0;
  33.     //Total de CHD por cada tipo de habitacion
  34.     $totalSGLCHD = 0;
  35.     $totalDBLCHD = 0;
  36.     $totalTPLCHD = 0;
  37.     $totalCDLCHD = 0;
  38.     //Total de ADT por cada tipo de habitacion
  39.     $totalSGLADT = 0;
  40.     $totalDBLADT = 0;
  41.     $totalTPLADT = 0;
  42.     $totalCDLADT = 0;
  43.     //Total de SEN por cada tipo de habitacion
  44.     $totalSGLSEN = 0;
  45.     $totalDBLSEN = 0;
  46.     $totalTPLSEN = 0;
  47.     $totalCDLSEN = 0;
  48.    
  49.     echo "Grupo $idgrupo; ";
  50.     foreach($posiciones as $numeroposicion=>$tiposhabitaciones){
  51.         foreach($tiposhabitaciones as $nombrehabitacion=>$tipopersona){
  52.             if( $nombrehabitacion == "SGL" ){
  53.                 $totalSGL = $totalSGL + 1;
  54.                 if( $tipopersona == "INF" ){
  55.                     $totalSGLINF = $totalSGLINF + 1;
  56.                 }
  57.                 else if( $tipopersona == "CHD" ){
  58.                     $totalSGLCHD = $totalSGLCHD + 1;
  59.                 }
  60.                 else if( $tipopersona == "ADT" ){
  61.                     $totalSGLADT = $totalSGLADT + 1;
  62.                 }                
  63.                 else if( $tipopersona == "SEN" ){
  64.                     $totalSGLSEN = $totalSGLSEN + 1;
  65.                 }                
  66.             }
  67.             else if ( $nombrehabitacion == "DBL"  ){
  68.                 $totalDBL = $totalDBL + 1;
  69.                 if( $tipopersona == "INF" ){
  70.                     $totalDBLINF = $totalDBLINF + 1;
  71.                 }
  72.                 else if( $tipopersona == "CHD" ){
  73.                     $totalDBLCHD = $totalDBLCHD + 1;
  74.                 }
  75.                 else if( $tipopersona == "ADT" ){
  76.                     $totalDBLADT = $totalDBLADT + 1;
  77.                 }                
  78.                 else if( $tipopersona == "SEN" ){
  79.                     $totalDBLSEN = $totalDBLSEN + 1;
  80.                 }                
  81.             }
  82.             else if ( $nombrehabitacion == "TPL"  ){
  83.                 $totalTPL = $totalTPL + 1;
  84.                 if( $tipopersona == "INF" ){
  85.                     $totalTPLINF = $totalTPLINF + 1;
  86.                 }
  87.                 else if( $tipopersona == "CHD" ){
  88.                     $totalTPLCHD = $totalTPLCHD + 1;
  89.                 }
  90.                 else if( $tipopersona == "ADT" ){
  91.                     $totalTPLADT = $totalTPLADT + 1;
  92.                 }                
  93.                 else if( $tipopersona == "SEN" ){
  94.                     $totalTPLSEN = $totalTPLSEN + 1;
  95.                 }                    
  96.             }
  97.             else if ( $nombrehabitacion == "CDL"  ){
  98.                 $totalCDL = $totalCDL + 1;
  99.                 if( $tipopersona == "INF" ){
  100.                     $totalCDLINF = $totalCDLINF + 1;
  101.                 }
  102.                 else if( $tipopersona == "CHD" ){
  103.                     $totalCDLCHD = $totalCDLCHD + 1;
  104.                 }
  105.                 else if( $tipopersona == "ADT" ){
  106.                     $totalCDLADT = $totalCDLADT + 1;
  107.                 }                
  108.                 else if( $tipopersona == "SEN" ){
  109.                     $totalCDLSEN = $totalCDLSEN + 1;
  110.                 }                
  111.             }        
  112.         }
  113.     }
  114.     if( $totalSGL > 0 ){
  115.         if( $totalSGLINF > 0 ){
  116.             echo "Habitación SGL = ".$totalSGLINF." INF ";
  117.         }
  118.         if( $totalSGLCHD > 0 ){
  119.             echo "Habitación SGL = ".$totalSGLCHD." CHD ";
  120.         }
  121.         if( $totalSGLADT > 0 ){
  122.             echo "Habitación SGL = ".$totalSGLADT." ADT ";
  123.         }
  124.         if( $totalSGLSEN > 0 ){
  125.             echo "Habitación SGL = ".$totalSGLSEN." SEN ";
  126.         }        
  127.     }
  128.    
  129.     if( $totalDBL > 0 ){
  130.         if( $totalDBLINF > 0 ){
  131.             echo "Habitación DBL = ".$totalDBLINF." INF, ";
  132.         }
  133.         if( $totalDBLCHD > 0 ){
  134.             echo "Habitación DBL = ".$totalDBLCHD." CHD, ";
  135.         }
  136.         if( $totalDBLADT > 0 ){
  137.             echo "Habitación DBL = ".$totalDBLADT." ADT, ";
  138.         }
  139.         if( $totalDBLSEN > 0 ){
  140.             echo "Habitación DBL = ".$totalDBLSEN." SEN, ";
  141.         }        
  142.     }    
  143.    
  144.     if( $totalTPL > 0 ){
  145.         if( $totalTPLINF > 0 ){
  146.             echo "Habitación TPL = ".$totalTPLINF." INF, ";
  147.         }
  148.         if( $totalTPLCHD > 0 ){
  149.             echo "Habitación TPL = ".$totalTPLCHD." CHD, ";
  150.         }
  151.         if( $totalTPLADT > 0 ){
  152.             echo "Habitación TPL = ".$totalTPLADT." ADT, ";
  153.         }
  154.         if( $totalTPLSEN > 0 ){
  155.             echo "Habitación TPL = ".$totalTPLSEN." SEN, ";
  156.         }        
  157.     }    
  158.    
  159.     if( $totalCDL > 0 ){
  160.         if( $totalCDLINF > 0 ){
  161.             echo "Habitación CDL = ".$totalCDLINF." INF, ";
  162.         }
  163.         if( $totalCDLCHD > 0 ){
  164.             echo "Habitación CDL = ".$totalCDLCHD." CHD, ";
  165.         }
  166.         if( $totalCDLADT > 0 ){
  167.             echo "Habitación CDL = ".$totalCDLADT." ADT, ";
  168.         }
  169.         if( $totalCDLSEN > 0 ){
  170.             echo "Habitación CDL = ".$totalCDLSEN." SEN, ";
  171.         }        
  172.     }    
  173.    
  174.     echo "<br>";
  175. }
  176.  
  177. ?>
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 14:07.