0 votes
in SoSci Survey (dt.) by s098453 (245 points)
edited by s098453

Hallo liebes Sosci-Survey-Team,

ich nutzen den Fragetyp Texteingabe mit Auswahlempfehlung, um den Befragten aus ca. 4000 Antwortalternativen 10 auswählen zu lassen. Diese 10 werden dann in den Folgefragen als Items angezeigt. Das funktioniert auch soweit.
Ich würde nur gerne zusätzlich verhindern, dass bei der Texteingabe mit Auswahlempfehlung Werte doppelt eingetragen werden können. Ich habe es schon mit folgendem Code versucht, aber das scheint nicht zu klappen:

$answers = getItems('A101', 'valid');
$answers2 = array_unique($answers); 

if ((count($answers)) > (count($answers2))) {
  repeatPage('A108');
}

Alternativ habe ich es mit valueList probiert, aber auch das funktioniert nicht:

$answers = valueList('A101');
$answers2 = array_unique($answers); 

if ((count($answers)) > (count($answers2))) {
  repeatPage('A108');
}

Können Sie mir hier weiterhelfen?
Vielen Dank!

Edit:

Ich habe jetzt folgende provisorische Lösung für mich gefunden, aber da gibt´s sicherlich elegantere Wege, oder? ;)

if (
((value('A101x1') != -9) and (value('A101x1') == value('A101x2'))) or
((value('A101x1') != -9) and (value('A101x1') == value('A101x3'))) or
((value('A101x1') != -9) and (value('A101x1') == value('A101x4'))) or
((value('A101x1') != -9) and (value('A101x1') == value('A101x5'))) or
((value('A101x1') != -9) and (value('A101x1') == value('A101x6'))) or
((value('A101x1') != -9) and (value('A101x1') == value('A101x7'))) or
((value('A101x1') != -9) and (value('A101x1') == value('A101x8'))) or
((value('A101x1') != -9) and (value('A101x1') == value('A101x9'))) or
((value('A101x1') != -9) and (value('A101x1') == value('A101x10'))) or
((value('A101x2') != -9) and (value('A101x2') == value('A101x3'))) or
((value('A101x2') != -9) and (value('A101x2') == value('A101x4'))) or
((value('A101x2') != -9) and (value('A101x2') == value('A101x5'))) or
((value('A101x2') != -9) and (value('A101x2') == value('A101x6'))) or
((value('A101x2') != -9) and (value('A101x2') == value('A101x7'))) or
((value('A101x2') != -9) and (value('A101x2') == value('A101x8'))) or
((value('A101x2') != -9) and (value('A101x2') == value('A101x9'))) or
((value('A101x2') != -9) and (value('A101x2') == value('A101x10'))) or
((value('A101x3') != -9) and (value('A101x3') == value('A101x4'))) or
((value('A101x3') != -9) and (value('A101x3') == value('A101x5'))) or
((value('A101x3') != -9) and (value('A101x3') == value('A101x6'))) or
((value('A101x3') != -9) and (value('A101x3') == value('A101x7'))) or
((value('A101x3') != -9) and (value('A101x3') == value('A101x8'))) or
((value('A101x3') != -9) and (value('A101x3') == value('A101x9'))) or
((value('A101x3') != -9) and (value('A101x3') == value('A101x10'))) or
((value('A101x4') != -9) and (value('A101x4') == value('A101x5'))) or
((value('A101x4') != -9) and (value('A101x4') == value('A101x6'))) or
((value('A101x4') != -9) and (value('A101x4') == value('A101x7'))) or
((value('A101x4') != -9) and (value('A101x4') == value('A101x8'))) or
((value('A101x4') != -9) and (value('A101x4') == value('A101x9'))) or
((value('A101x4') != -9) and (value('A101x4') == value('A101x10'))) or
((value('A101x5') != -9) and (value('A101x5') == value('A101x6'))) or
((value('A101x5') != -9) and (value('A101x5') == value('A101x7'))) or
((value('A101x5') != -9) and (value('A101x5') == value('A101x8'))) or
((value('A101x5') != -9) and (value('A101x5') == value('A101x9'))) or
((value('A101x5') != -9) and (value('A101x5') == value('A101x10'))) or
((value('A101x6') != -9) and (value('A101x6') == value('A101x7'))) or
((value('A101x6') != -9) and (value('A101x6') == value('A101x8'))) or
((value('A101x6') != -9) and (value('A101x6') == value('A101x9'))) or
((value('A101x6') != -9) and (value('A101x6') == value('A101x10'))) or
((value('A101x7') != -9) and (value('A101x7') == value('A101x8'))) or
((value('A101x7') != -9) and (value('A101x7') == value('A101x9'))) or
((value('A101x7') != -9) and (value('A101x7') == value('A101x10'))) or
((value('A101x8') != -9) and (value('A101x8') == value('A101x9'))) or
((value('A101x8') != -9) and (value('A101x8') == value('A101x10'))) or
((value('A101x9') != -9) and (value('A101x9') == value('A101x10')))
)
 {
  repeatPage('A108');
}
by SoSci Survey (327k points)
Eigentlich sieht Ihre zweite Lösung schon ganz ordentlich aus. Fügen Sie doch bitte mal ein wenig debug() ein, damit wir sehen, was da in den Array steht:

$answers = valueList('A101');
$answers2 = array_unique($answers);
debug($answers);
debug($answers2);

Und dann natürlich im Debug-Modus (gelber Pfeil) ab A101 starten.

2 Answers

0 votes
by s098453 (245 points)

Vielen Dank für die Rückmeldung, ich habe es jetzt im Debug-Modus durchgespielt und bekomme diese Arrays angenzeigt:

Debug information for $answers:
A101x14125, A101x22697, A101x32819, A101x4889, A101x5889, A101x6-9, A101x7-9, A101x8-9, A101x9-9, A101x10-9

Debug information for $answers2:
A101x14125, A101x22697, A101x32819, A101x4889, A101x6-9

Ich hatte vergessen zu erwähnen, dass ich keine Antwortpflicht habe. Das Problem scheint also daran zu liegen, dass bei unvollständiger Antwort die fehlenden Werte in answers belassen werden und in answers 2 die "doppelten" fehlenden Werte gelöscht werden. Wird die Frage ganz ausgefüllt, funktioniert es auch.

Gibt es vielleicht eine Möglichkeit, die fehlenden Werte bei valueList unberücksichtigt zu lassen?

by SoSci Survey (327k points)
> Gibt es vielleicht eine Möglichkeit, die fehlenden Werte bei valueList unberücksichtigt zu lassen?

Nicht als Parameter in der Funktion, aber Sie können es mit einer kleinen Schleife erledigen.

$values = [];
$answers = valueList('A101');
foreach ($answers as $value) {
  if ($value > 0) {
    $values[] = $value;
  }
}
debug($values);
0 votes
by s098453 (245 points)

Vielen Dank für die Hilfe, funktioniert wunderbar so :)

Hier nochmal der komplette Code für ähnliche Fragestellungen:

   // Liste values ohne fehlende Werte aus der valueList erstellen
    $values = [];
    $answers = valueList('CR01');
    foreach ($answers as $value) {
      if ($value > 0) {
        $values[] = $value;
      }
    }
    
// doppelte Werte entfernen und in values_unique speichern
    $values_unique = array_unique($values); 
    
    
    // Fehlermeldung, wenn Arrays ungleiche Anzahl Elemente
    if ((count($values)) > (count($values_unique))) {
      repeatPage('CR03');
    }

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

...