Cita:
Iniciado por hhs Italico, perdon se me fue mal la redaccion lo ultimo eran recomendaciones pero no para ti. De echo ya ayudaste mucho con el ejemplo
Si yo se amigo @hhs ... que tu eres de los que quieren que los usuarios hagan el maximo esfuerzo.
Publico de todas formas la implementacion de tu idea de mejora:
Código PHP:
Ver original<?php
/*
@author: Pablo Bozzolo (italico76)
*/
Class PreguntaCuestionario implements Countable, Iterator
{
private $_pregunta = NULL;
private $_respuestas = [];
private $_respuesta_correcta = null;
public function __construct($pregunta)
{
// texto de la pregunta
$this->_pregunta=$pregunta;
}
public function getPregunta()
{
return $this->_pregunta;
}
// alias de getPregunta
public function getNombre()
{
return $this->_pregunta;
}
// una posible repuesta
public function addRespuesta($respuesta)
{
$this->_respuestas[] = $respuesta;
return $this;
}
// posibles repuestas
public function addRespuestas
(array $respuestas) {
foreach ($respuestas as $respuesta)
$this->_respuestas[] = $respuesta;
return $this;
}
// la respuesta considerada 'correcta', si la hay
// posicion como rango {1...N}
public function setRespuestaCorrecta($posicion)
{
$this->_respuesta_correcta = $this->_respuestas[$posicion-1];
return $this;
}
public function getRespuestaCorrecta()
{
return $this->_respuesta_correcta;
}
// desordena respuestas
public function desordenar()
{
return $this;
}
/* Iterator */
reset($this->_respuestas
); }
{
return current($this->_respuestas
); }
{
return key($this->_respuestas
); }
{
next($this->_respuestas
); }
function valid()
{
return isset($this->_respuestas
[$this->key()]); }
/* Countable */
{
return count($this->_respuestas
); }
}
Class Cuestionario implements Countable, Iterator
{
private $_nombre = NULL;
private $_preguntas= array(); private $_mode = NULL;
/*
@param nombre del cuestionario
@return void
*/
public function __construct($nombre)
{
$this->_nombre=$nombre;
}
public function getNombre()
{
return $this->_nombre;
}
public function addPregunta(PreguntaCuestionario $pregunta)
{
$this->_preguntas[]= $pregunta;
return $this;
}
// desordena preguntas
public function desordenar($tambien_respuestas=true)
{
if ($tambien_respuestas)
foreach ($this->_preguntas as $pregunta)
$pregunta->desordenar();
return $this;
}
/* Iterator */
reset($this->_preguntas
); }
{
}
{
return key($this->_preguntas
); }
{
}
function valid()
{
return isset($this->_preguntas
[$this->key()]); }
/* Countable */
{
return count($this->_preguntas
); }
// para consola
function __toString()
{
$out = "Cuestionario: {$this->_nombre}\n\n";
foreach ($this->_preguntas as $pregunta)
{
$out .= $pregunta->getNombre()."\n\n";
foreach ($pregunta as $option)
$out .= "( ) $option\n";
$out .= "\n(RTA: ".$pregunta->getRespuestaCorrecta().")\n\n";
$out .= "\n";
}
return $out;
}
}
// creo Cuestionario:
$pregs = new Cuestionario("America");
$pregs ->addPregunta(
(new PreguntaCuestionario("Cuando los europeos descubrieron oficialmente de America ?"))
->addRespuesta(1942)->addRespuesta(1542)->addRespuesta(1492)
->setRespuestaCorrecta(3)
)
->addPregunta(
(new PreguntaCuestionario("Quien era Atahuala ?"))
->addRespuestas(["un espanol conquistador","un jeque americano"])
->setRespuestaCorrecta(2)
)
->addPregunta(
(new PreguntaCuestionario("De que nacionalidad era Cristobal Colon ?"))
->addRespuestas(["No se sabe con certeza","italiano","portugues","ingles"])
->setRespuestaCorrecta(1)
)->desordenar();
// Lo recupero:
$nombre = $pregs->getNombre();
foreach ($pregs as $pregunta)
{
echo "<span>".$pregunta->getNombre()."</span><p/>";
foreach ($pregunta as $option)
echo "<input type=\"radio\" name=\"{$nombre}[]\" value=\"\"/>{$option}</option><p/>";
//echo $pregunta->getRespuestaCorrecta();
echo "<br/>";
}
// recupero respuestas
foreach ($pregs as $pregunta)
echo $pregunta->getRespuestaCorrecta()."<br/>";
// para consola:
echo $pregs;
Ahora se puede desordenar todo el formulario tanto preguntas como respuestas con llamado al metodo desordenar() en el cuestionario