0 votes
in SoSci Survey (dt.) by s132861 (200 points)

Hallo,

um das Ende einer array Variablen zu überprüfen, wollte ich gerne die "end()" Funktion benutzen. Dabei habe ich die Fehlermeldung bekommen, dass ich mich an den Administrator wenden müsse, um diese Funktion für meinen Fragebogen freizugeben.

Wie genau kann ich jetzt weiter vorgehen? Bzw. über welchen Kanal kann ich den Administrator kontaktieren?

by SoSci Survey (305k points)
Wenn Sie den verwendeten PHP-Code posten, kann ich gerne genauer auf mögliche Lösungen eingehen.
by s132861 (200 points)
Hier einmal der Code. Ich bin mir sicher, dass ich das nicht sehr effizient gemacht habe, es war eher etwas herumprobieren.

Ziel war eigentlich
1. zu überprüfen, ob die 4 Fragen (SD01-04) auf der Seite zuvor beantwortet wurden, sie
2. anzuzeigen, falls nicht und
 3. einen Warnungstextbaustein (WA) anzuzeigen, der die Teilnehmer*in darüber informiert, dass und welche Items noch fehlen.
Dazu enthält WA den Platzhalter %fehlt%, in dem ich die fehlenden Items aufzählen möchte. Da das ganze aber in einem Satz passiert, soll das Letzte Element des arrays, dass ich da in den Platzhalter einfüge ein "und" enthalten, damit es mehr nach einem echten Satz klingt.
Ich hoffe das ist einigermaßen verständlich :)



$bezeichnungen = array();
registerVariable('bezeichnungen');




if (value('SD01') == '-9') {
            question('SD01');
            markFail('SD01');
            $bezeichnungen[1] = 'Geschlecht';
}

if (value('SD02') == '-9') {
            question('SD02');
            markFail('SD02');
            $bezeichnungen[2] = 'Beruf';
}

if (value('SD03') == '0') {
            question('SD03');
            markFail('SD03');
            $bezeichnungen[3] = 'Studienfach';      
}

if (value('SD04_01') == '') {
            question('SD04_01');
            markFail('SD04_01');
            $bezeichnungen[4] = 'Alter';
}


if (end($bezeichnungen) == 'Alter' && count($bezeichnung) >= 2) {
            end($bezeichnungen) = 'und Alter';
            if (count($bezeichnungen) == 4){
                    $bezeichnungen[2] = 'Beruf,';
                    $bezeichnungen[1] = 'Geschlecht,';
            }
            if ($bezeichnungen[3] == 'Studienfach' || $bezeichnungen[2] == 'Beruf') && $bezeichnungen[1] == 'Geschlecht'){
                    $bezeichnungen[1] = 'Geschlecht,';
            }
            if ($bezeichnungen[2] == 'Beruf' && $bezeichnungen[3] == 'Studienfach'){
                    $bezeichnungen[2] = 'Beruf,';
            }
}
elseif (end($bezeichnungen) == 'Studienfach' && count($bezeichnung) >= 2) {
            end($bezeichnungen) = 'und Studienfach';
            if (count($bezeichnungen) == 3) {
                    $bezeichnungen[2] = 'Beruf,';
           }
}
elseif (end($bezeichnungen) == 'Beruf') {
            end($bezeichnungen) = 'und Beruf';
}


if ($bezeichnungen != ''){
            $bezeichnungen = implode(' ', $bezeichnungen);
            replace('%fehlt%', $bezeichnungen);
            text('WA');
}

2 Answers

0 votes
by SoSci Survey (305k points)
selected by s132861
 
Best answer

Hier ein Beispiel, wie man den Code ein wenig effizienter gestalten kann.

Statt end($x) kann man bei Bedarf (besteht hier nicht) einfach $x[count($x) - 1] schreiben.

$fragen = [
  'SD01' => 'Geschlecht',
  'SD02' => 'Beruf',
  'SD03' => 'Studienfach',
  'SD04' => 'Alter'
];

// Fehlende Fragen sammeln
$labels = [];
foreach ($fragen as $frage => $label) {
    if (value('SD01') < 0) {
            question($frage);
            markFail($frage);
            $labels[] = $label;
    }
}

// Text mit "und"
if (count($labels) > 1) {
    $last = array_pop($labels);
    $liste = implode(', ', $labels).' und '.$last;
    replace('%fehlt%', $liste);
    text('WA');
} elseif (count($labels) == 1) {
    $liste = $labels[0];
    replace('%fehlt%', $liste);
    text('WA');
}
by s132861 (200 points)
Ohh ja, das sieht tatsächlich deutlich übersichtlicher aus. Vielen Dank für die Hilfe :)
0 votes
by s109993 (10.2k points)

Guten Morgen,

eine ähnliche Frage wurde auf Stackoverflow gepostet:
https://stackoverflow.com/questions/3687358/whats-the-best-way-to-get-the-last-element-of-an-array-without-deleting-it

Die erste Antwort zeigt zehn Optionen auf, wie das letzte Element eines Arrays isoliert werden kann. Vielleicht ist da etwas dabei, das Sie gebrauchen können.

by s132861 (200 points)
Ohh vielen Dank, da werd ich mal drin stöbern :)

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...