0 votes
in SoSci Survey (dt.) by s127250 (145 points)

Liebes Support-Team,

ich habe in meinem Fragebogen 4 Zettel, jeder Zettel hat andere Fragen, die zufällig rotieren (über mehrere Seiten hinweg). Ich möchte nun die angezeigte Reihenfolge der Fragen in einer internen Variable speichern. Mit dem Code aus der put()-Dokumentation bekomme ich folgende Fehlermeldungen:
"Die Funktion id() erwartet als Parameter Nr. 2 einen Wert vom Typ integer. Es wurde ein Wert (GR29) vom Typ string angegeben." und
"Für die Funktion put() wurde anstatt einer Frage- oder Item-Kennung ein Parameter vom Typ NULL angegeben")

Das ist der Code von Seite 1 (GR37 ist der Zufallsgenerator, IV01 die interne Variable):

$gruppe= value('GR37');
if ($gruppe == 1) {
    // Das Mischen der Liste nur einmalig ausführen
    if (!isset($gramm1)) {
    // Liste der Frage-Kennungen erstellen
    $gramm1= array(
        'GR01', 'GR16',
        'GR20', 'GR24',
        'GR05', 'GR28',
        'GR32', 
        'BA05', 'BA02',
        'BA03', 'BA06',
        'BA07', 'BA08',
        'BA04'
   );
    // Die Liste zufällig mischen
    shuffle($gramm1);
    // Die Listen auf allen Seiten verfügbar machen
    registerVariable('gramm1');
    }
    // Die Kennungen der Liste anzeigen
    question('BA01');
    question($gramm1[0]);
    question($gramm1[1]);
    question($gramm1[2]);
    question($gramm1[3]);
    question($gramm1[4]);
    question($gramm1[5]);
    question($gramm1[6]);
//Rangfolge merken
for ($i=0; $i<count($gramm1); $i++) {
// Kennung der internen Variable aus Frage-Kennung plus Inhalt des Elements (!) erstellen
$id = id('IV01', $gramm1[$i]);
// Hier den Rang speichern
put($id, $i + 1);
}
}
elseif (value('GR37') == 2) {// Das Mischen der Liste nur einmalig ausführen
    if (!isset($gramm2)) {
    $gramm2= array(
        'GR13', 'GR29',
        'GR21', 'GR33',
        'GR04', 
        'GR25', 'GR17',
        'BA05', 'BA02',
        'BA03', 'BA06',
        'BA07', 'BA08',
        'BA04'
   );
    // Die Liste zufällig mischen
    shuffle($gramm2);
    // Die Listen auf allen Seiten verfügbar machen
    registerVariable('gramm2');
    }
    // Die Kennungen der Liste anzeigen
    question('BA01');
    question($gramm2[0]);
    question($gramm2[1]);
    question($gramm2[2]);
    question($gramm2[3]);
    question($gramm2[4]);
    question($gramm2[5]);
    question($gramm2[6]);
//Rangfolge merken
for ($i=0; $i<count($gramm2); $i++) {
// Kennung der internen Variable aus Frage-Kennung plus Inhalt des Elements (!) erstellen
$id = id('IV01', $gramm2[$i]);
// Hier den Rang speichern
put($id, $i + 1);
}
}elseif (value('GR37') == 3) {
    if (!isset($gramm3)) {
    $gramm3= array(
        'GR14', 'GR26',
        'GR18', 'GR30',
        'GR03', 'GR08',
        'GR22', 
        'BA05', 'BA02',
        'BA03', 'BA06',
        'BA07', 'BA08',
        'BA04'
   );
    // Die Liste zufällig mischen
    shuffle($gramm3);
    // Die Listen auf allen Seiten verfügbar machen
    registerVariable('gramm3');
    }
    // Die Kennungen der Liste anzeigen
    question('BA01');
    question($gramm3[0]);
    question($gramm3[1]);
    question($gramm3[2]);
    question($gramm3[3]);
    question($gramm3[4]);
    question($gramm3[5]);
    question($gramm3[6]);
//Rangfolge merken
for ($i=0; $i<count($gramm3); $i++) {
// Kennung der internen Variable aus Frage-Kennung plus Inhalt des Elements (!) erstellen
$id = id('IV01', $gramm3[$i]);
put($id, $i + 1);
}
}elseif (value('GR37') == 4) {
  if (!isset($gramm4)) {
    $gramm4= array(
        'GR15', 'GR27',
        'GR02', 'GR07',
        'GR19', 'GR31',
        'GR23', 
        'BA05', 'BA02',
        'BA03', 'BA06',
        'BA07', 'BA08',
        'BA04'
   );
    // Die Liste zufällig mischen
    shuffle($gramm4);
    // Die Listen auf allen Seiten verfügbar machen
    registerVariable('gramm4');
    }
    // Die Kennungen der Liste anzeigen
    question('BA01');
    question($gramm4[0]);
    question($gramm4[1]);
    question($gramm4[2]);
    question($gramm4[3]);
    question($gramm4[4]);
    question($gramm4[5]);
    question($gramm4[6]);
//Rangfolge merken
for ($i=0; $i<count($gramm4); $i++) {
// Kennung der internen Variable aus Frage-Kennung plus Inhalt des Elements (!) erstellen
$id = id('IV01', $gramm4[$i]);
// Hier den Rang speichern
put($id, $i + 1);
}
}

Ich weiß nicht genau, wie ich die Fehler beheben soll. Die Arrays in id() sind doch eigentlich vom Typ integer?

Und noch eine Frage: ist es überhaupt möglich, alle Rangfolgen von 4 verschiedenen Zetteln in der gleichen internen Variable zu speichern, oder brauche ich pro Zettel/Array eine eigene IV? Die Logik hab ich noch nicht ganz verstanden.

Vielen Dank schonmal!

1 Answer

0 votes
by SoSci Survey (311k points)

Sie mischen ein Array aus Texten ... entsprechen liefert $gramm1[$i] auch einen Text.

Wenn Sie Ränge speichern möchten (also nicht die Kennungen der Fragen), dann mischen Sie bitte nicht das Array selbst, sondern die Indizes - und übernehmen Sie deren Abfolge dann in das Array für die Fragen.

Dieses Vorgehen ist im letzten Beispiel der Anleitung Beispiel: Randomisierung I vorgestellt. Wesentlich dabei ist das array_keys(), dessen Ergebnis dann gemischt wird.

by s127250 (145 points)
Vielen Dank, es funktioniert! Danke für Ihre schnelle Antwort, der Support ist wirklich ausgezeichnet!

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

...