PHP - Acceder a un array bidimensional mediante un desplegable

 
Vista:
sin imagen de perfil
Val: 5
Ha aumentado su posición en 25 puestos en PHP (en relación al último mes)
Gráfica de PHP

Acceder a un array bidimensional mediante un desplegable

Publicado por John (2 intervenciones) el 05/04/2021 18:49:04
Tengo un array bidimensional con el que quiero crear un select desplegable en el cual al elegir una de las distintas opciones, me devuelva una tabla con los datos dados por la opción elegida tal que así:
xdgbfdbb

No consigo hacer que me muestre todos los valores cuando elijo la opción "todas", me saltan varios errores (Undefined index:) y me suma los valores numéricos mas veces de la cuenta. Lo que hago en el siguiente código es un if donde si elijo la opción "todas" añada al array $listaAlum la suma de los valores numéricos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?php
 
$arrayResultados =  array
         ('Libre'=>  array('No Presentados'=>12,'Suspenso'=>10,'Aprobado'=>6,'Notable'=>3,'Sobresaliente'=>1),
          'On-line'=> array('Suspenso'=>26,'Aprobado'=>25,'Notable'=>22,'Sobresaliente'=>27),
          'Presencial'=>array  ('Suspenso'=>30,'Aprobado'=>25,'Notable'=>37,'Sobresaliente'=>28,'Matrícula de Honor'=>9)
          );
?>
 
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
 
<form method="POST">
        <select name="desplegable">
        <option value="todas">Todas</option>
 
<?php
    foreach ($arrayResultados as $indice => $valor)
    {
        echo "<option value='".$indice."'>".$indice."</option>";
    }
?>
</select>
<input type="submit" name="envio" value="Aceptar">
    </form>
 
 
<?php
        if(isset($_POST["envio"]))
        {
            $listaAlum=[];
 
            foreach ($arrayResultados as $indice => $valor)
            {
                foreach ($valor as $detalles => $numero)
                {
                    if($_POST["desplegable"])
                    {
                        if($_POST["desplegable"]==$indice)
                        {
                            $listaAlum[$detalles] = $numero;
                        }
                        else
                        {
                            if($_POST["desplegable"]=="todas") //cuando elija la opcion todas
                            {
                                foreach ($arrayResultados as $indice => $valor)
                                {
                                    foreach ($valor as $detalles => $numero)
                                    {
                                        $listaAlum[$detalles] += $numero;
                                    }
                                }
                            }
                        }
                    }
                }
            }
 
            echo "<h3>Seleccion: ".$_POST["desplegable"]."</h3>";
            if(sizeof($listaAlum)>0){
                echo "<table border='1'><tr><th>Calificacion</th><th>Alumnos</th></tr>";
                foreach ($listaAlum as $calificacion => $alumnos) {
                    echo "<tr><td>".$calificacion."</td><td>".$alumnos."</td></tr>";
                }
                echo "</table>";
            }
            else{ echo "No hay datos"; }
        }
 
 
 
 
?>
</body>
</html>

Y otra de las veces solo me muestra los ultimos valores del array:
sarfasz

He probado de todo, a ver si me podeis echar un cable. Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 5
Ha aumentado su posición en 25 puestos en PHP (en relación al último mes)
Gráfica de PHP

Acceder a un array bidimensional mediante un desplegable

Publicado por John (2 intervenciones) el 06/04/2021 15:34:28
Pude resolverlo, aquí la solución:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php
 
$arrayResultados =  array
		 ('Libre'=>  array('No Presentados'=>12,'Suspenso'=>10,'Aprobado'=>6,'Notable'=>3,'Sobresaliente'=>1),
		  'On-line'=> array('Suspenso'=>26,'Aprobado'=>25,'Notable'=>22,'Sobresaliente'=>27),
		  'Presencial'=>array  ('Suspenso'=>30,'Aprobado'=>25,'Notable'=>37,'Sobresaliente'=>28,'Matrícula de Honor'=>9)
		  );
?>
 
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
</head>
<body>
 
<form method="POST">
		<select name="desplegable">
		<option value="todas">Todas</option>
 
<?php
	foreach ($arrayResultados as $indice => $valor)
	{
		echo "<option value='".$indice."'>".$indice."</option>";
	}
?>
</select>
<input type="submit" name="envio" value="Aceptar">
	</form>
<?php
$arrayCalificaciones=array();
 
		if(isset($_POST["envio"]))
		{
			$listaAlum=[];
 
			foreach ($arrayResultados as $indice => $valor)
			{
				foreach ($valor as $detalles => $numero)
				{
					if($_POST["desplegable"]==$indice)
						{
							$listaAlum[$detalles] = $numero;
						}
				}
			}
 
						if($_POST["desplegable"]=="todas") //cuando elija la opcion todas
						{
							foreach ($arrayResultados as $indice=>$vector)
							{
								foreach($vector as $categoria=>$numero)
								{
									if (!array_key_exists($categoria,$listaAlum))
									{
										$listaAlum[$categoria]=$numero;
									}
									else
									{
										$listaAlum[$categoria]=$listaAlum[$categoria]+$numero;
									}
								}
							}
						}
 
			echo "<h3>Seleccion: ".$_POST["desplegable"]."</h3>";
			if(sizeof($listaAlum)>0)
			{
				echo "<table border='1'><tr><th>Calificacion</th><th>Alumnos</th></tr>";
				foreach ($listaAlum as $calificacion => $alumnos)
				{
					echo "<tr><td>".$calificacion."</td><td>".$alumnos."</td></tr>";
				}
					echo "</table>";
			}
			else
			{
				echo "No hay datos";
			}
		}
?>
</body>
</html>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar