0 votes
in SoSci Survey (dt.) by s085346 (300 points)

Guten Abend,

ich habe Code-Blöcke anhand Ihrer Anleitung gebaut, die zur Randomisierung von mehreren Arrays (=Trials) dienen. Dabei soll auch die Reihenfolge der Trials in internen Variablen gespeichert werden.

Beide Blöcke sind jeweils auf der Seite vor der ersten zu randomisierenden Seite platziert, welche auch zusätzlichen Text enthält.

Der erste der beiden Codes funktioniert auch bei mehrfachem Testen tadellos:

//Seitenkennungen als Array speichern
$parts= array(
 '1' => array('TG11','TG12', 'TG13'),
 '2' => array('TG21','TG22', 'TG23'),
 '3' => array('TG31','TG32', 'TG33'),
 '4' => array('TG41','TG42', 'TG43'),
 '5' => array('TG51','TG52', 'TG53'),
 '6' => array('TG61','TG62', 'TG63'),
 '7' => array('TG71','TG72', 'TG73'),
 '8' => array('TG81','TG82', 'TG83'),
 '9' => array('TG91','TG92', 'TG93'),
 '10' => array('TG101','TG102', 'TG103'),
 '11' => array('TG111','TG112', 'TG113'),
 '12' => array('TG121','TG122', 'TG123'),
 '13' => array('TG131','TG132', 'TG133'),
 '14' => array('TG141','TG142', 'TG143'),
 '15' => array('TG151','TG152', 'TG153'),
 '16' => array('TG161','TG162', 'TG163'),
 '17' => array('TG171','TG172', 'TG173'),
 '18' => array('TG181','TG182', 'TG183'),
 '19' => array('TG191','TG192', 'TG193'),
 '20' => array('TG201','TG202', 'TG203'),
 '21' => array('TG211','TG212', 'TG213'),
 '22' => array('TG221','TG222', 'TG223'),
 '23' => array('TG231','TG232', 'TG233'),
 '24' => array('TG241','TG242', 'TG243'),
 '25' => array('TG251','TG252', 'TG253'),
 '26' => array('TG261','TG262', 'TG263'),
 '27' => array('TG271','TG272', 'TG273'),
 '28' => array('TG281','TG282', 'TG283'),
 '29' => array('TG291','TG292', 'TG293'),
 '30' => array('TG301','TG302', 'TG303'),
 '31' => array('TG311','TG312', 'TG313'),
 '32' => array('TG321','TG322', 'TG323'),
 '33' => array('TG331','TG332', 'TG333'),
 '34' => array('TG341','TG342', 'TG343'),
 '35' => array('TG351','TG352', 'TG353'),
 '36' => array('TG361','TG362', 'TG363'),
 '37' => array('TG371','TG372', 'TG373'),
 '38' => array('TG381','TG382', 'TG383'),
 '39' => array('TG391','TG392', 'TG393'),
 '40' => array('TG401','TG402', 'TG403'));
// Jetzt noch die Reihenfolge der Blöcke zufällig mischen
$keys = array_keys($parts);
shuffle($keys);

// Für jeden Schlüssel die Position im gemischten Array abspeichern
put('IV05_01', array_search('1', $keys) + 1);
put('IV05_02', array_search('2', $keys) + 1);
put('IV05_03', array_search('3', $keys) + 1);
put('IV05_04', array_search('4', $keys) + 1);
put('IV05_05', array_search('5', $keys) + 1);
put('IV05_06', array_search('6', $keys) + 1);
put('IV05_07', array_search('7', $keys) + 1);
put('IV05_08', array_search('8', $keys) + 1);
put('IV05_09', array_search('9', $keys) + 1);
put('IV05_10', array_search('10', $keys) + 1);
put('IV05_11', array_search('11', $keys) + 1);
put('IV05_12', array_search('12', $keys) + 1);
put('IV05_13', array_search('13', $keys) + 1);
put('IV05_14', array_search('14', $keys) + 1);
put('IV05_15', array_search('15', $keys) + 1);
put('IV05_16', array_search('16', $keys) + 1);
put('IV05_17', array_search('17', $keys) + 1);
put('IV05_18', array_search('18', $keys) + 1);
put('IV05_19', array_search('19', $keys) + 1);
put('IV05_20', array_search('20', $keys) + 1);
put('IV05_21', array_search('21', $keys) + 1);
put('IV05_22', array_search('22', $keys) + 1);
put('IV05_23', array_search('23', $keys) + 1);
put('IV05_24', array_search('24', $keys) + 1);
put('IV05_25', array_search('25', $keys) + 1);
put('IV05_26', array_search('26', $keys) + 1);
put('IV05_27', array_search('27', $keys) + 1);
put('IV05_28', array_search('28', $keys) + 1);
put('IV05_29', array_search('29', $keys) + 1);
put('IV05_30', array_search('30', $keys) + 1);
put('IV05_31', array_search('31', $keys) + 1);
put('IV05_32', array_search('32', $keys) + 1);
put('IV05_33', array_search('33', $keys) + 1);
put('IV05_34', array_search('34', $keys) + 1);
put('IV05_35', array_search('35', $keys) + 1);
put('IV05_36', array_search('36', $keys) + 1);
put('IV05_37', array_search('37', $keys) + 1);
put('IV05_38', array_search('38', $keys) + 1);
put('IV05_39', array_search('39', $keys) + 1);
put('IV05_40', array_search('40', $keys) + 1);

// Ergebnis als Seitenabfolge festlegen
setPageOrder(
	$parts[$keys[0]],
	$parts[$keys[1]],
	$parts[$keys[2]],
	$parts[$keys[3]],
	$parts[$keys[4]],
	$parts[$keys[5]],
	$parts[$keys[6]],
	$parts[$keys[7]],
	$parts[$keys[8]],
	$parts[$keys[9]],
	$parts[$keys[10]],
	$parts[$keys[11]],
	$parts[$keys[12]],
	$parts[$keys[13]],
	$parts[$keys[14]],  
	$parts[$keys[15]],
	$parts[$keys[16]],
	$parts[$keys[17]],
	$parts[$keys[18]],
	$parts[$keys[19]],
	$parts[$keys[20]],
	$parts[$keys[21]],
	$parts[$keys[22]],
	$parts[$keys[23]],
	$parts[$keys[24]],
	$parts[$keys[25]],
	$parts[$keys[26]],
	$parts[$keys[27]],
	$parts[$keys[28]],
	$parts[$keys[29]],
	$parts[$keys[30]],
	$parts[$keys[31]],
	$parts[$keys[32]],
	$parts[$keys[33]],
	$parts[$keys[34]],
	$parts[$keys[35]],
	$parts[$keys[36]],
	$parts[$keys[37]],
	$parts[$keys[38]],
	$parts[$keys[39]],
  'UGIntro1'
);


Der zweite Block ist nahezu identisch, er enthält in jedem Array allerdings eine Seite mehr und je nach Antwort auf Seite 2 eines jeden Arrays wird entweder Seite 3 präsentiert oder mittels goToPage von Seite 3 zu Seite 4 gesprungen.

In diesem Block werden jedoch beim Testen Arrays/Trials ausgelassen (= nicht im Datensatz enthalten) und/oder mehrfach präsentiert, wobei die Antwort der ersten Präsentation bei der Wiederholung "voreingestellt" ist.

// Seitenkennungen als Array speichern
$parts2= array(
 '1' => array('UG11','UG12', 'UG13', 'UG14'),
 '2' => array('UG21','UG22', 'UG23', 'UG24'),
 '3' => array('UG31','UG32', 'UG33', 'UG34'),
 '4' => array('UG41','UG42', 'UG43', 'UG44'),
 '5' => array('UG51','UG52', 'UG53', 'UG54'),
 '6' => array('UG61','UG62', 'UG63', 'UG64'),
 '7' => array('UG71','UG72', 'UG73', 'UG74'),
 '8' => array('UG81','UG82', 'UG83', 'UG84'),
 '9' => array('UG91','UG92', 'UG93', 'UG94'),
 '10' => array('UG101','UG102', 'UG103', 'UG104'),
 '11' => array('UG111','UG112', 'UG113', 'UG114'),
 '12' => array('UG121','UG122', 'UG123', 'UG124'),
 '13' => array('UG131','UG132', 'UG133', 'UG134'),
 '14' => array('UG141','UG142', 'UG143', 'UG144'),
 '15' => array('UG151','UG152', 'UG153', 'UG154'),
 '16' => array('UG161','UG162', 'UG163', 'UG164'),
 '17' => array('UG171','UG172', 'UG173', 'UG174'),
 '18' => array('UG181','UG182', 'UG183', 'UG184'),
 '19' => array('UG191','UG192', 'UG193', 'UG194'),
 '20' => array('UG201','UG202', 'UG203', 'UG204'),
 '21' => array('UG211','UG212', 'UG213', 'UG214'),
 '22' => array('UG221','UG222', 'UG223', 'UG224'),
 '23' => array('UG231','UG232', 'UG233', 'UG234'),
 '24' => array('UG241','UG242', 'UG243', 'UG244'),
 '25' => array('UG251','UG252', 'UG253', 'UG254'),
 '26' => array('UG261','UG262', 'UG263', 'UG264'),
 '27' => array('UG271','UG272', 'UG273', 'UG274'),
 '28' => array('UG281','UG282', 'UG283', 'UG284'),
 '29' => array('UG291','UG292', 'UG293', 'UG294'),
 '30' => array('UG301','UG302', 'UG303', 'UG304'),
 '31' => array('UG311','UG312', 'UG313', 'UG314'),
 '32' => array('UG321','UG322', 'UG323', 'UG324'),
 '33' => array('UG331','UG332', 'UG333', 'UG334'),
 '34' => array('UG341','UG342', 'UG343', 'UG344'),
 '35' => array('UG351','UG352', 'UG353', 'UG354'),
 '36' => array('UG361','UG362', 'UG363', 'UG364'),
 '37' => array('UG371','UG372', 'UG373', 'UG374'),
 '38' => array('UG381','UG382', 'UG383', 'UG384'),
 '39' => array('UG391','UG392', 'UG393', 'UG394'),
 '40' => array('UG401','UG402', 'UG403', 'UG404'));
// Jetzt noch die Reihenfolge der Blöcke zufällig mischen
$keys2 = array_keys($parts2);
shuffle($keys2);

// Für jeden Schlüssel die Position im gemischten Array abspeichern
put('IV06_01', array_search('1', $keys2) + 1);
put('IV06_02', array_search('2', $keys2) + 1);
put('IV06_03', array_search('3', $keys2) + 1);
put('IV06_04', array_search('4', $keys2) + 1);
put('IV06_05', array_search('5', $keys2) + 1);
put('IV06_06', array_search('6', $keys2) + 1);
put('IV06_07', array_search('7', $keys2) + 1);
put('IV06_08', array_search('8', $keys2) + 1);
put('IV06_09', array_search('9', $keys2) + 1);
put('IV06_10', array_search('10', $keys2) + 1);
put('IV06_11', array_search('11', $keys2) + 1);
put('IV06_12', array_search('12', $keys2) + 1);
put('IV06_13', array_search('13', $keys2) + 1);
put('IV06_14', array_search('14', $keys2) + 1);
put('IV06_15', array_search('15', $keys2) + 1);
put('IV06_16', array_search('16', $keys2) + 1);
put('IV06_17', array_search('17', $keys2) + 1);
put('IV06_18', array_search('18', $keys2) + 1);
put('IV06_19', array_search('19', $keys2) + 1);
put('IV06_20', array_search('20', $keys2) + 1);
put('IV06_21', array_search('21', $keys2) + 1);
put('IV06_22', array_search('22', $keys2) + 1);
put('IV06_23', array_search('23', $keys2) + 1);
put('IV06_24', array_search('24', $keys2) + 1);
put('IV06_25', array_search('25', $keys2) + 1);
put('IV06_26', array_search('26', $keys2) + 1);
put('IV06_27', array_search('27', $keys2) + 1);
put('IV06_28', array_search('28', $keys2) + 1);
put('IV06_29', array_search('29', $keys2) + 1);
put('IV06_30', array_search('30', $keys2) + 1);
put('IV06_31', array_search('31', $keys2) + 1);
put('IV06_32', array_search('32', $keys2) + 1);
put('IV06_33', array_search('33', $keys2) + 1);
put('IV06_34', array_search('34', $keys2) + 1);
put('IV06_35', array_search('35', $keys2) + 1);
put('IV06_36', array_search('36', $keys2) + 1);
put('IV06_37', array_search('37', $keys2) + 1);
put('IV06_38', array_search('38', $keys2) + 1);
put('IV06_39', array_search('39', $keys2) + 1);
put('IV06_40', array_search('40', $keys2) + 1);

// Ergebnis als Seitenabfolge festlegen

setPageOrder(
	$parts2[$keys2[0]],
	$parts2[$keys2[1]],
	$parts2[$keys2[2]],
	$parts2[$keys2[3]],
	$parts2[$keys2[4]],
	$parts2[$keys2[5]],
	$parts2[$keys2[6]],
	$parts2[$keys2[7]],
	$parts2[$keys2[8]],
	$parts2[$keys2[9]],
	$parts2[$keys2[10]],
	$parts2[$keys2[11]],
	$parts2[$keys2[12]],
	$parts2[$keys2[13]],
	$parts2[$keys2[14]],  
	$parts2[$keys2[15]],
	$parts2[$keys2[16]],
	$parts2[$keys2[17]],
	$parts2[$keys2[18]],
	$parts2[$keys2[19]],
	$parts2[$keys2[20]],
	$parts2[$keys2[21]],
	$parts2[$keys2[22]],
	$parts2[$keys2[23]],
	$parts2[$keys2[24]],
	$parts2[$keys2[25]],
	$parts2[$keys2[26]],
	$parts2[$keys2[27]],
	$parts2[$keys2[28]],
	$parts2[$keys2[29]],
	$parts2[$keys2[30]],
	$parts2[$keys2[31]],
	$parts2[$keys2[32]],
	$parts2[$keys2[33]],
	$parts2[$keys2[34]],
	$parts2[$keys2[35]],
	$parts2[$keys2[36]],
	$parts2[$keys2[37]],
	$parts2[$keys2[38]],
	$parts2[$keys2[39]],
  'IntroMC'
);

Gibt es alternative Lösungen für meine Herangehensweise, die funktioniert?

Vielen Dank für den Support!

1 Answer

0 votes
by SoSci Survey (304k points)
selected by s085346
 
Best answer

Sie sollten sich FOR-Schleifen mal ansehen. Damit könnten Sie die Länge Ihres Codes etwa halbieren - und zugleich das Risiko für Fehler, die beim Copy & Paste entstehen.

Zweiter Teil, untere Hälfte (komplett):

// Für jeden Schlüssel die Position im gemischten Array abspeichern
$order = [];
for ($i=1; $i<=40; $i++) {
  put(id('IV06', $i), array_search((string)$i, $keys2) + 1);
  $order = array_merge($order, $parts2[$keys2[$i - 1]]);
}
// Ergebnis als Seitenabfolge festlegen
setPageOrder($order, 'IntroMC');

Eine vage Vermutung ist folgende: Die Seite mit dem zweiten PHP-Code zeigt vermutlich keinen Inhalt. Deshalb springt SoSci Survey direkt von dieser Seite auf die erste Inhaltsseite - und sollte die erste Frage dann nicht beantwortet werden, wird auch die PHP-Seite erneut ausgeführt und alles neu gemischt. Prüfen Sie anhand der Debug-Information bitte zunächst, ob das der Fall ist und ob das mit dem Problem zussammenhängen könnte.

Ansonsten sehen Sie im Debug-Code ja, welche Seitenabfolge festgelegt wird. Kopieren Sie diese, dann lassen Sie den Test laufen und dann kontrollieren Sie, welche Daten fehlen und ob diese in der Seitenabfolge ursprünglich noch aufgetaucht sind.

Wenn die Seitenabfolge plötzlich irgendwo abbricht, haben Sie innerhalb der Trials vielleicht ein weitere setPageOrder() oder ein loopPage() versteckt, welches die ursprüngliche Abfolge abbricht. Wenn zufällig Seiten fehlen, dann wird vermutlich irgendwo neu gemischt.

Generell ist es übrigns nicht sehr elegant, tausende Seite im Fragebogen anzulegen. Wenn die Seiten alle gleichartig sind, kommt man mit einem loopPage() oftmals viel effizienter zum Ziel.

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

...