0 votes
in SoSci Survey (dt.) by s092700 (305 points)
edited by s092700

Hallo Unterstützer!

Ich habe 7 Skalen-Fragen, aus denen ich per Zufallsziehung eine unterschiedliche Anzahl von Items ziehe. Diese 7 Skalen-Fragen sollen rotiert auf 2 unterschiedlichen Seiten auftauchen.

Ich kann die Fragen über zwei Seiten rotieren:

if (!isset($fragen)) {
$fragen = array(
'AK06', 'AK07',
'AK08', 'AK09',
'AK10', 'AK11',
'AK12');
shuffle($fragen);

 registerVariable('fragen');
 } 

question($fragen[0]);
question($fragen[1]);
question($fragen[2]);
question($fragen[3]);
question($fragen[4]);
question($fragen[5]);
question($fragen[6]);

Und ich kann aus den Fragen eine vorher festgelegte Anzahl von zufälligen Items ziehen:

if (!isset($itemsVK)) {
$itemsVK = random_items('AK06', 2);
registerVariable($itemsVK);
}
question('AK06', $itemsVK);

if (!isset($itemsAI)) {
  $itemsAI = random_items('AK07', 7);
  registerVariable($itemsAI);
}

question('AK07', $itemsAI);
if (!isset($itemsUK)) {
  $itemsUK = random_items('AK08', 6);
  registerVariable($itemsUK);
}
question('AK08', $itemsUK);

if (!isset($itemsVA)) {
  $itemsVA = random_items('AK09', 5);
  registerVariable($itemsVA);
}
question('AK09', $itemsVA);

if (!isset($itemsSW)) {
  $itemsSW = random_items('AK10', 7);
  registerVariable($itemsSW);
}
question('AK10', $itemsSW);

if (!isset($itemsSC)) {
  $itemsSC = random_items('AK11', 6);
  registerVariable($itemsSC);
}
question('AK11', $itemsSC);

if (!isset($itemsOE)) {
  $itemsOE = random_items('AK12', 7);
  registerVariable($itemsOE);
}
question('AK12', $itemsOE);

Wie kombiniere ich die beiden Codes?

In Anlehnung an die Hilfeseiten habe ich auch das hier probiert, weiß dann aber nicht, wie es weitergeht:

    if (!isset($blocks)) {
  $blocks = array(
    array('AK06', $itemsVK),
    array('AK07', $itemsAI),
    array('AK08', $itemsUK),
    array('AK09', $itemsVA), 
    array('AK10', $itemsSW), 
    array('AK11', $itemsSC), 
    array('AK12', $itemsOE)
  );

  shuffle($blocks);
  registerVariable('blocks');
}

Was schreibe ich auf Seite 1, was auf Seite 2? Was muss zuerst definiert werden? Und gibt es so etwas wie ein "if... and...then" oder so?

Ich bin absolut blutiger php-Anfänger, d.h. es wäre gut, wenn der Code so einfach wie möglich ist und Sie sich an meinen Benennungen bzw. an meiner jetzigen Schreibweise orientieren könnten (wenn das geht..?).
Vielen Dank schon jetzt für Ihre Antwort!!

by SoSci Survey (327k points)
Bevor ich antworte, müssten Sie mir bitte noch eine wichtige Information geben: Ist es Ihnen wichtig, dass alle Items der Fragen etwas gleich häufig abgefragt werden? Eine unbeschränkte Zufallsziehung mit random_items() kann im Extremfall nämlich immer dieselben Items ziehen. Unwahrscheinlich aber möglich. Jedenfalls wird sie keine (!) Gleichverteilung liefern.
by s092700 (305 points)
Ja, eine Gleichverteilung ist tatsächlich von Nöten.
Falls das dann mit random_items () nicht möglich ist und es auf eine Kombination von Zufallsgenerator-Frage und Skalen-Item-Frage hinausläuft: Ich bin nicht in der Lage einen so komplexen Code zu schreiben, der die gezogenen Zettel den Skalen-Fragen-Items zuordnet.
Ich kann nur ganz einfache Sachen.

2 Answers

0 votes
by SoSci Survey (327k points)

Ja, eine Gleichverteilung ist tatsächlich von Nöten.

Dann benötigen Sie als erstes bitte eine Frage "Zufallsgenerator" pro Frage, aus der Sie Items ziehen möchten. Also 7 Zufallsgeneratoren.

Zum Teil macht das die Sache dann aber einfacher. Den ersten Teil lassen wir, wie er ist:

if (!isset($fragen)) {
  $fragen = array(
    'AK06', 'AK07',
    'AK08', 'AK09',
    'AK10', 'AK11',
   'AK12'
   );
  shuffle($fragen);
  registerVariable($fragen);
}

Dazu speichern wir noch ein Array, welcher Zufallsgenerator zu welcher Frage gehört:

$randoms = array(
  'AK06' => 'RG01',
  'AK07' => 'RG02',
  'AK08' => 'RG03',
  // ...
);

Das benötigen wir entweder auf beiden Seiten oder die Variable wird auch mittes registerVariable() für weitere Seiten verfügbar gemacht.

Und dann können Sie die Fragen einfach abarbeiten - so auf die Seiten verteilt, wie Sie möchten:

// Erste Frage
$frage = $fragen[0];
$random = $randoms[$frage];  // Kennung des Zufallsgenerators ermittlen
$items = valueList($random);  // Liste gezogener Items holen
question($frage, $items);  // Frage anzeigen

Wenn man will, kann man das ganze auch kompakter schreiben:

// Zweite Frage
$frage = $fragen[1];
question($frage, valueList($randoms[$frage]));

... ist aber weniger übersichtlich :)

by s092700 (305 points)
edited by s092700
Aktualisierung der Frage. 16:33
0 votes
by s092700 (305 points)
edited by s092700

Vielen Dank! Den Code habe ich verstanden!
(Die Zufallsgeneratorfragen haben die Bezeichnung AK13 - AK19).

Jetzt läuft es allerdings leider noch nicht:
Schreibe ich nach

registerVariable($randoms);

den vorgeschlagenen Code, kommen seitenweise Fehlermeldungen, die ich per Mail an Sie weiterleiten soll.
So sieht ein Ausschnitt aus:

Welches Offset muss ich definieren?

by SoSci Survey (327k points)
Das Problem lag darin, dass question() mit einer beschrifteten Liste, wie sie valueList() liefert, noch nicht korrekt umgehen konnte. Ich die Fehlermeldung nun verschwunden?
by s092700 (305 points)
Leider nein, ich bekomme folgende Rückmeldungen - aber für Seite 9, wo nur noch Frage 5,6 und 7 abgearbeitet werden (mit den Indexen [4,5,6]). Seite 8, wo der Code steht, erscheint gar nicht erst:

Für die Funktion valueList wurden nicht ausreichend Argumente angegeben, 1 Argumente sind zwingend erforderlich.

Im Befehl question() wurde keine Frage-Kennung angegeben.

In dieser Zeile soll wohl ein Fehler sein:
$frage = $fragen[7]; //Dabei gibt es gar keinen Index mit [7] - [6] ist der höchste.
by SoSci Survey (327k points)
> Dabei gibt es gar keinen Index mit [7] - [6] ist der höchste.

Dann können Sie diese Zeile einfach so nicht schreiben ;)

Möchten Sie vielleicht einmal in einer neuen Frage den kompletten PHP-Code, die Fehlermeldungen und die Debug-Information posten? Ich glaube, dann wird's übersichtlicher. Danke.
by s092700 (305 points)
edited by s092700
Done!
Vielen Dank für Antworten!

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

...