Ja, dies ist möglich - aber je nachdem, wie hübsch man es haben will, ist es ein wenig aufwändiger. Denn den PHP-Code, welcher den HTML-Code für die Ausgabe schreibt, muss man "per Hand" bauen.
Für eine Mehrfachauswahl (Multiple Choice) könnte man z.B: zwei Funktionen wie folgt verwenden - eine, welche die Punkte abzählt und eine weitere, welche sich dann auf Basis der ersten um die Anzeige kümmert.
function auswertungMultipleChoice($frage, $muster)
{
$points = 0;
$counts = count($muster);
$responses = [];
$labels = [];
$musterGI = [];
foreach ($muster as $index => $korrekt) {
$item = $index + 1;
$labels[$item] = getItemtext($frage, $item);
$response = (int)value(id($frage, $item));
$responses[$item] = $response;
if ($response == $korrekt) {
$points++;
}
$musterGI[$item] = $korrekt;
}
return [
'points' => $points,
'result' => max(0, ($points / $counts) - 0.5) * 2,
'reference' => $musterGI,
'responses' => $responses,
'labels' => $labels
];
}
Und deren Ergebnis kommt dann hier hinein.
/**
* Antworten auf eine Single Choice Frage anzeigen und korrekt/falsche Antworten hervorheben
*/
function htmlSingleChoice($frage, array $correct)
{
$html = '<div class="print s2question" id="'.$frage.'_prn">'.NL.
'<div class="items">'.NL;
// Need the right and eventually given answer
$response = value($frage);
$answers = array_unique(array_merge([$response], $correct));
foreach ($answers as $item) {
if ($item == $response) {
if (in_array($response, $correct)) {
$symbol = '✓'; // '✅';
$color = '#00b050';
} else {
$symbol = ''; // '↯'; //'❌;
$color = '#a51e37';
}
} else {
$symbol = '';
$color = '#00b050';
}
if ($response == $item) {
$box = '☒';
} else {
$box = '☐';
}
if (in_array($item, $correct)) {
$info = '(richtig)';
} else {
$info = '(falsch)';
}
$html.=
'<div class="option print selected prefixed" style="position: relative; overflow: visible;">
<span style="display: block; position: absolute; top: 0; left: -20px;">'.$symbol.'</span>
<span class="prefix" style="color: '.$color.'; font-weight: bold; font-size: 150%;">'.$box.'</span>
<div class="content">'.getItemtext($frage, $item).' '.$info.'</div>
</div>'.NL;
}
$html.= '</div>'.NL;
return $html;
}
Das ist aber nur eine Möglichkeit ... je nach Fragetyp und was man genau vorhat, kann es man es auch ganz anders bauen.