Leer resultados encuestas PHP

eXtreM3

Buenas! Ayer me tiré toda la tarde con esto y no saqué nada en claro... Resulta que se hizo un sistema rápido de encuestas, en el cual puede haber N preguntas y cada pregunta puede tener sólo un valor (del 1 al 10).

Guardo los resultados de cada encuesta, por ejemplo, así: "1:7;2:4;4:4;" (sin las comillas). Es el id de la pregunta y el resultado; en nuestro ejemplo, viene siendo que para la respuesta 1 se contestó 7, para la 2 se contestó 4 y para la 4 se contestó 4.

Mi problema viene al interpretar los resultados, necesito pintar una tabla que sea más o menos así:

PREGUNTA 1:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -> valores del 1 al 10
| 0 | 3 | 1 | 2 | 6 | 3 | 8 | 9 | 7 | 3 | -> número de respuestas según valor

La pregunta 1, tuvo:

  • 0 personas que contestaron 1
  • 3 personas que contestaron 2
  • 1 persona que contestó 3
    ...
  • 3 personas que contestaron 10

Probando y probando, lo máximo que he conseguido ha sido esto:

foreach ($queryAnswers as $r) {
    $clearResults = explode(";",$r["answers"]);
    for($i=0;$i<sizeof($clearResults)-1;$i++){
        $rNum[] = $clearResults[$i]; 
    }
}

Si hago esto

print_r(array_count_values($rNum));

el resultado es

Array ( [1:7] => 1 [2:4] => 1 [4:4] => 1 [1:9] => 1 [2:9] => 2 [4:7] => 1 [1:5] => 1 [4:2] => 1 )
  • La pregunta 1 ha tenido 1 persona que votó 7
  • La pregunta 2 ha tenido 1 persona que votó 2
    y así sucesivamente.

¿Cómo puedo sumar auxiliarmente estos resultados para después pintar la tabla como quiero?

eXtreM3

Updateo. Con el siguiente código:

echo "<table>";
foreach ($rNum as $value) {
    if($qAux != $value[0]){
        echo "<tr>
                <td colspan='10'>".utf8_decode($queryQuestions[$qAux]["name"])."</td>
            </tr>";
        $qAux = $value[0];
        echo "<tr>
            ";
            for($i=1;$i<=10;$i++){
                echo "<td>$i</td>";
            }
        echo "</tr>
        <tr>";
            $auxNum = 0;
            for($i=1;$i<=10;$i++){

            if($i == $value[2]){
                $auxNum++;
            }
            echo "<td>".$auxNum."</td>";
            $auxNum = 0;
        }
    echo "
    </tr>";
}
}
echo "</table>";

he conseguido llegar a esto:

Ya está casi, lo que pasa es que no me acumula el valor en $auxNum porque entra en cada iteración y machaca... argg.

Vaya puta basura de código, me da la impresión de que estoy haciendo burrada tras burrada, aunque de momento lo primordial es que funcione, ya veré luego cómo optimizarlo!

RaymaN

http://viper-7.com/DmOWiG

$answers[0] = "1:7;2:4;3:4";
$answers[1] = "1:6;2:4;3:1";
$answers[2] = "1:6;2:4;3:5";

foreach ($answers as $a) {

$questions = explode(';', $a);

foreach ($questions as $q) {

	$qa = explode(':', $q);
	
	if (!isset($final[$qa[0]])) {
		$final[$qa[0]] = array_fill(1, 10, 0);
	}
	
	$final[$qa[0]][$qa[1]]++;
}
}

echo "<table>";

foreach ($final as $num => $values) {

echo "<tr>
		<th colspan='10'>Pregunta {$num}</th>
	  </tr>
	  <tr>";

for ($i = 1; $i <= 10; $i++) {

	echo "<td>{$i}</td>";
}

echo "</tr>
	  <tr>";

foreach ($values as $v) {

	echo "<td>{$v}</td>";
}
}
	
echo "</tr>
	</table>";
1 1 respuesta
eXtreM3

#3 vaya máquina colega, muchísimas gracias! No me llevo bien con los arrays :(
La función array_fill no la conocía!

Esto qué hace?

$final[$qa[0]][$qa[1]]++;
2 respuestas
RaymaN

#4 incrementa el número de veces que se ha elegido una opción.

$qa[0] es la pregunta y $qa[1] la respuesta.

1 1 respuesta
QuitCat

#4 Si no me equivoco usa un Array para las respuestas tal que Array[nº de pregunta][valor respuesta]

1
eXtreM3

#5 al final me ha quedado así (después de hacer un fácil cálculo para obtener porcentajes), exportado dinámicamente a excel:

Gracias otra vez ^^

Usuarios habituales

  • eXtreM3
  • QuitCat
  • RaymaN