0 votes
in SoSci Survey (dt.) by s010182 (220 points)

Liebe Liste,

habe einen Array mit 432 Elementen anlegen wollen. Dieser hatte mehr als 2kb, weshalb mir fortlaufend folgende Fehlermeldung angezeigt wurde

Irgendwo im Thread las ich, dass man das Problem ignorieren könnte, da im öffentlichen Befragungsmodus die Fehlermeldung nicht angezeigt werden würde. Das habe ich aber nicht replizieren können.

Aus diesen Gründen habe ich den Array in mehrere gleichgroße Blöcke bestehend aus 80 Elementen portioniert und arbeite mit (else)if Bedingungen.

urnDraw('urne_vignetten', 'IN21');
$arrayid=(value('IN21_01')); 

registerVariable($arrayid);

if ((value('IN21_01')>=0) & (value('IN21_01')<=80)) {
$expchce = array(
'1,0,0,0,0,0,0,0',
'2,0,0,0,0,0,0,1',
:
:
'80,0,1,1,0,1,1,1',
'81,0,1,1,1,0,0,0',);
} elseif (((value('IN21_01'))>=81) & (((value('IN21_01'))<=160))) {
$expchce = array(
'82,0,1,1,1,0,0,1',
'83,0,1,1,1,0,1,0',
:
:
'160,1,0,0,1,1,1,1',
'161,1,0,0,2,0,0,0',);
} elseif (((value('IN21_01'))>=161) & (((value('IN21_01'))<=240))) {
$expchce = array(
'162,1,0,0,2,0,0,1',
'163,1,0,0,2,0,1,0',
:
:
'240,1,1,1,2,1,1,1',
'241,1,2,0,0,0,0,0',);
} elseif (((value('IN21_01'))>=241) & (((value('IN21_01'))<=320))) {
usw.
}

$gezeigtechoicevignettestringarray = $expchce[$arrayid]; 
registerVariable('gezeigtechoicevignettestringarray');

Der Code (":" steht für Ausblendung) funktioniert für den ersten Block (Elemente 0 bis 80) der if-Bedingung einwandfrei, nicht aber für die restlichen Blöcke. Bei den restlichen Blöcken, d.h., wenn value('IN21_01')>=81, erhalte ich folgende Fehlermeldung:

Wenn ich es richtig verstehe, dann wird nichts definiert, obwohl in "$arrayid" ein Wert (>=81) abgelegt ist.

Ich stehe leider auf dem Schlauch. Wo liegt das Problem?

Gruß

3 Answers

0 votes
by SoSci Survey (309k points)
selected by s010182
 
Best answer

Meine Empfehlung ist, dass Sie diesen Datenblock nicht beim Fragebogen zusammenstellen unterbringen, sondern in der Datenbank für Inhalte ablegen.

Das hat mehrere Vorteile:

  1. Sie können ihne direkt über die Nummer als Schlüssel auslesen mittels dbGet()
  2. Sie haben den passenden Eintrag direkt als Array und
  3. Sie müssen die Daten nicht als Kopie in jedem einzelnen Interview speichern.

Außerdem wird Ihr PHP-Code deutlich (!) übersichtlicher:

$vignette = dbGet('V'.value('IN21_01'));

... vorausgesetzt, Sie haben als Schlüssel V1, V2, V3, ... V432 gewählt.

by s010182 (220 points)
Herzlichen Dank. Guter Tipp. Tatsächlich viel einfacher und schneller umzusetzen.
0 votes
by SoSci Survey (309k points)

Die Meldung "Undefined offset: 424" bedeutet, dass es in der Variable $expchce keinen Eintrag mit dem Index 424 gibt.

Offenbar steht in "IN21_01" (zweite Zeile) diese Zahl und offenbar werden keine entsprechend langen Listen für $expchce definiert.

habe einen Array mit 432 Elementen anlegen wollen. Dieser hatte mehr als 2kb, weshalb mir fortlaufend folgende Fehlermeldung angezeigt wurde

Das Problem ist weniger das Array, als vielmehr, dass Sie es mittels registerVariable() im Datensatz speichern möchten. Vielleicht möchten Sie den Kontext Ihres Codes ein wenig genauer erläutern?

0 votes
by s010182 (220 points)
edited by s010182

Vielen Dank für Ihre schnelle Rückmeldung.

Der dargestellte Code auf der betreffenden Fragebogenseite (Seite 54) war nahezu vollständig. Ich hatte lediglich Teile der if-Bedingung und die letzten beiden Zeilen ausgespart, um es kürzer zu halten. Nun der gesamte Code mit einigen Aussparungen.

Die Meldung "Undefined offset: 424" bedeutet, dass es in der Variable $expchce keinen Eintrag mit dem Index 424 gibt.

Die if-Bedingung berücksichtigt Indizes von 1 bis 432 (siehe unten, teile ausgespart). Der Eintrag 424 ist also im Code bedacht, wird aber nicht abgerufen. Das Problem dürfte woanders liegen. Ich habe den Code mehrmals getestet. Die Befehle funktionieren für den ersten Block der if-Bedingung (also für die Elemente 0 bis 80). Bei den restlichen Blocks taucht die o.g. Fehlermeldung auf. Eine Fehlermeldung bzgl. der if-Schleife (z.B. zu wenige Klammern) liegt nicht vor.

urnDraw('urne_vignetten', 'IN21');
$arrayid=(value('IN21_01')); 

registerVariable($arrayid);

if ((value('IN21_01')>=0) & (value('IN21_01')<=80)) {
$expchce = array(
'1,0,0,0,0,0,0,0',
'2,0,0,0,0,0,0,1',
: Ausgespart
: Ausgespart
'80,0,1,1,0,1,1,1',
'81,0,1,1,1,0,0,0',);
} elseif (((value('IN21_01'))>=81) & (((value('IN21_01'))<=160))) {
$expchce = array(
'82,0,1,1,1,0,0,1',
'83,0,1,1,1,0,1,0',
: Ausgespart
: Ausgespart
'160,1,0,0,1,1,1,1',
'161,1,0,0,2,0,0,0',);
} elseif (((value('IN21_01'))>=161) & (((value('IN21_01'))<=240))) {
$expchce = array(
'162,1,0,0,2,0,0,1',
'163,1,0,0,2,0,1,0',
: Ausgespart
: Ausgespart
'240,1,1,1,2,1,1,1',
'241,1,2,0,0,0,0,0',);
} elseif (((value('IN21_01'))>=241) & (((value('IN21_01'))<=320))) {
$expchce = array(
'322,2,0,1,1,0,0,1',
'323,2,0,1,1,0,1,0',
: Ausgespart
: Ausgespart
'400,2,2,0,1,1,1,1',
'401,2,2,0,2,0,0,0',);
} elseif ((value('IN21_01')>=401) & (value('IN21_01')<=431)) {
$expchce = array(
'402,2,2,0,2,0,0,1',
'403,2,2,0,2,0,1,0',
: Ausgespart
: Ausgespart
'431,2,2,1,2,1,1,0',
'432,2,2,1,2,1,1,1',
);
}
registerVariable($expchce);

$gezeigtechoicevignettestringarray = $expchce[$arrayid]; 
registerVariable('gezeigtechoicevignettestringarray');
$gezeigtechoicevignette= explode(",", $gezeigtechoicevignettestringarray);
registerVariable('gezeigtechoicevignette');

Das Problem ist weniger das Array, als vielmehr, dass Sie es mittels registerVariable() im Datensatz speichern möchten.

Wenn ich bei der Definition des Arrays $expchce auf die if-Bedingungen verzichte und den Befehl `registerVariable($expchce); auskommentiere ...

$expchce = array(
'1,0,0,0,0,0,0,0',
'2,0,0,0,0,0,0,1',
: Ausgespart
: Ausgespart
'431,2,2,1,2,1,1,0',
'432,2,2,1,2,1,1,1',
);
//registerVariable($expchce);

... erhalte ich folgende Fehlermeldung:

`

Vielleicht möchten Sie den Kontext Ihres Codes ein wenig genauer erläutern?

Auf der nächsten Fragebogenseite verwende ich die Variable $gezeigtechoicevignette, um die Elemente des Arrays für eine Vignette auszulesen.

$arrayid = $gezeigtechoicevignette [0];  
$w_unt = $gezeigtechoicevignette [1];		
$w_zhl = $gezeigtechoicevignette [2]; 	     
$w_or = $gezeigtechoicevignette [3]; 			
$w_en = $gezeigtechoicevignette [4];			
$w_ho = $gezeigtechoicevignette [5]; 			
$w_tar = $gezeigtechoicevignette [6]; 		
$w_std = $gezeigtechoicevignette [7];	

registerVariable('arrayid');
registerVariable('w_unt');
registerVariable('w_zhl');
registerVariable('w_or');
registerVariable('w_en');
registerVariable('w_ho');
registerVariable('w_tar');
registerVariable('w_std');

Anschließend werden die numerischen Ausprägungen verbalisiert und in einer Vignette dargestellt. Wie oben erwähnt funktioniert der gesamte Code für die Elemente 0 bis 80 des Arrays $expchce und mir wird keine Fehlermeldung bzgl. der if-Schleife angezeigt.

Was kann hier das Problem bzw. die Lösung sein?

by SoSci Survey (309k points)
Bitte markieren Sie Code (auswählen) und klicken Sie dann die Taste {}, um den PHP-Code als solchen zu formatieren. Danke.
by s010182 (220 points)
Selbstverständlich. Erledigt.

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

...