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

0 votes

Liebes Support-Team,

mit Hilfe von arrays werden in meinem Projekt 6 Personen in 6 Runden 36 Aussagen zugeordnet. In einer Erweiterung sollen diese 36 Aussagen nun aber aus einem Aussagenpool von 72 Aussagen gezogen werden.
Die Funktion, die etwas ähnliches macht ist array_rand, allerdings scheint diese mit Zurücklegen zu arbeiten. Gibt es eine Option ohne Zurücklegen?

Vielen Dank,
Anne Römpke

// Inhalte in Arrays auflisten
$personen = array(
  1 => '001.jpg',
  2 => '002.jpg',
  3 => '003.jpg',
  4 => '004.jpg',
  5 => '005.jpg',
  6 => '006.jpg',
  // etc.
);
$aussagen = array(  
  1 => 'G001',
  2 => 'G002',
  3 => 'G003',
  4 => 'G004',
  5 => 'G005',
  6 => 'G006',
  7 => 'G007',
  8 => 'G008',
  9 => 'G009',
  10 => 'G010',
  11 => 'G011',
  12 => 'G012',
  13 => 'G013',
  14 => 'G014',
  15 => 'G015',
  16 => 'G016',
  17 => 'G017',
  18 => 'G018',
  19 => 'G019',
  20 => 'G020',
  21 => 'G021',
  22 => 'G022',
  23 => 'G023',
  24 => 'G024',
  25 => 'G025',
  26 => 'G026',
  27 => 'G027',
  28 => 'G028',
  29 => 'G029',
  30 => 'G030',
  31 => 'G031',
  32 => 'G032',
  33 => 'G033',
  34 => 'G034',
  35 => 'G035',
  36 => 'G036',
  37 => 'G037',
  38 => 'G038',
  39 => 'G039',
  40 => 'G040',
  41 => 'G041',
  42 => 'G042',
  43 => 'G043',
  44 => 'G044',
  45 => 'G045',
  46 => 'G046',
  47 => 'G047',
  48 => 'G048',
  49 => 'G049',
  50 => 'G050',
  51 => 'G051',
  52 => 'G052',
  53 => 'G053',
  54 => 'G054',
  55 => 'G055',
  56 => 'G056',
  57 => 'G057',
  58 => 'G058',
  59 => 'G059',
  60 => 'G060',
  61 => 'G061',
  62 => 'G062',
  63 => 'G063',
  64 => 'G064',
  65 => 'G065',
  66 => 'G066',
  67 => 'G067',
  68 => 'G068',
  69 => 'G069',
  70 => 'G070',
  71 => 'G071',
  72 => 'G072'
  
);

// Mischen dürfen wir nur einmal, daher isset()
if (!isset($orderP)) {
  // Sechsmal die Personen
  $orderP = array();
  for ($i=0; $i<6; $i++) {
    $keysP = array_keys($personen);  // Erstmal die Nummer 1 bis 6 für die Personen ...
    shuffle($keysP);  // ... mischen
    debug($keysP);
    $orderP = array_merge($orderP, $keysP);  // Und in eine Liste schreiben, die immer länger wird
  }
 // Dann noch die Aussagen
  $orderA = array_keys($aussagen)($input, 5);
  shuffle($orderA);
  // Jetzt noch zwischenspeichern, damit es über 36 Seiten hinweg funktioniert
  registerVariable($orderP);
  registerVariable($orderA);
  

// Abfolge speichern
put('E001_01', implode(',', $orderP));
// zum Anzeigen im Debug Mode 
$toShow = implode(',', $orderP);
debug($toShow);


put('E002_01', implode(',', $orderA));
// zum Anzeigen im Debug Mode 
$toShow2 = implode(',', $orderA);
debug($toShow2);


// Automatische Seitenweiterleitung
if (!isset($time1)) {
  $time1 = time();
  registerVariable('time1');  // Die Variable $time0 auch nach Ende des PHP-Codes aufbewahren
}
// Prüfung, ob die Zeit schon abgelaufen ist
// (z.B. weil der Teilnehmer die Seite neu geladen hat)
$timer = 336;  // Der Teilnehmer hat 100 Sekunden Zeit zur Bearbeitung
if (time() >= $time1 + $timer) {
  goToPage('next');
}
// Die verbleibende Zeit muss auch dem JavaScript-Code bekannt gemacht werden
$remain = $time1 + $timer - time();
replace('%remain%', $remain);


}
// Hier wird das Programm aus den Arrays nur noch "abgespult"
$i = loopPage(count($orderA));


// Person
debug($i);
debug($orderP);
html('<img src="'.$personen[$orderP[$i]].'" alt="">');
// Aussage
show($aussagen[$orderA[$i]]);
in SoSci Survey (dt.) by s015125 (125 points)

1 Answer

0 votes

Wenn es darum geht, dass alle Aussagen über die Interviews verteilt ungefähr gleich häufig gezogen werden, dann empfehle ich einen "Zufallsgenerator" - dieser kann 36 aus 72 Items/Aussagen/Zettel ziehen und dabei auf Gleichverteilung achten.

In Ihrem Fall wäre zum Auslesen der gezogenen Werte vermutlich auch noch der Befehl valueList() zu erwähnen, der mehrere Items einer Variable in ein Array auslesen kann. Der Befehl ist noch nicht dokumentiert: Er erwartet als einzigen Parameter die Kennung der Frage - in Ihrem Fall der Zufallsgenerator-Frage.

by SoSci Survey (89.5k points)
valueList() mit Fragen
...