0 votes
in SoSci Survey (dt.) by s155949 (160 points)

Mir fehlt nun ein letzter Schritt bei der discrete Choice-Analyse. Ich möchte die beiden zufällig gezogenen Kombinationen (insgesamt 180 Möglichkeiten) separat abspeichern, damit ich die vier Attribute in einem nächsten Schritt in einer Tabelle darstellen kann.

Das Problem liegt beim Übergang von replace() zur list(). Es kommen jeweils Fehlermeldungen, dass $AP10_01_1 oder %AP10_01_1% oder $APx01 (habe alle mir in Sinn kommende Möglichkeiten ausgetestet) nicht definiert ist.
Wie kann ich also die gezogene Kombination definieren, sodass ich diese dann in der Tabelle differenziert anzeigen kann?
Eine Kombination beinhaltet jeweils 4 Eigenschaften. Es gibt insgesamt 180 Möglichkeiten.

    $kombinationen = array(
            1 => array('20'.'%','allgemeines Gemeinde'.'- oder Kantonsbudget','100'.'% an den Kanton','keine Freigrenze'),
            2 => array('20'.'%','allgemeines Gemeinde'.'- oder Kantonsbudget','50'.'% an Kanton und 50'.'% an Gemeinde','keine Freigrenze'),
            3 => array('20'.'%','allgemeines Gemeinde'.'- oder Kantonsbudget','100'.'% an d'.'ie Gemeinde','keine Freigrenze'),
            4 => array('20'.'%','allgemeines Gemeinde'.'- oder Kantonsbudget','100'.'% an den Kanton','unter 20 000 CHF abgabefrei'),
        ...
        178 => array('60'.'%','raumplanerischen Tätigkeiten','100'.'% an den Kanton','unter 100 000 CHF abgabefrei'),
        179 => array('60'.'%','raumplanerischen Tätigkeiten','50'.'% an Kanton und 50'.'% an Gemeinde','unter 100 000 CHF abgabefrei'),
        180 => array('60'.'%','raumplanerischen Tätigkeiten','100'.'% an d'.'ie Gemeinde','unter 100 000 CHF abgabefrei'),
);
$variants = valueList('AP10');
debug($variants);
 foreach ($variants as $varID => $code) {
      $data = $kombinationen[$code];
 foreach ($data as $i => $text) {
          replace('%'.$varID.'_'.($i+1).'%', $text);
          }
 }
            
            
list($A1L, $A2L, $A3L, $A4L) = $AP10_01_1;
            
 list($A1R, $A2R, $A3R, $A4R) = $AP10_02_1;
            
            
 html('
       <table border="1" width="100%" cellspacing="0">
        <colgroup>  
        <col width="25%">   
        <col width="37.5%">
        <col width="37.5%">
         </colgroup>
                    <tr>
                        <td></td>
                        <td bgcolor="lightgray"><b>Alternative 1</b></td>
                        <td bgcolor="lightgray"><b>Alternative 2</b></td>
                    </tr>
                    <tr>
                        <td bgcolor="lightgray"><b>Abgabesatz</b></td>
                        <td> '.$A1L.' </td>
                        <td> '.$A1R.' </td>
                    </tr>
                    <tr>
                        <td bgcolor="lightgray"><b>Verwendungszweck</b></td>
                        <td> '.$A2L.' </td>
                        <td> '.$A2R.' </td>
                    </tr>
                    <tr>
                        <td bgcolor="lightgray"> <b>Ertragsaufteilung</b> </td>
                        <td> '.$A3L.' </td>
                        <td> '.$A3R.' </td>
                    </tr>
                    <tr>
                        <td bgcolor="lightgray"><b> Mindestfreigrenze</b> </td>
                        <td> '.$A4L.' </td>
                        <td> '.$A4R.' </td>
                    </tr>
</table>
);
by s155949 (160 points)
Ein weiteres Problem ist folgende Meldung:
"Fehler im Fragebogen: Invalid argument supplied for foreach()", damit ist das 2. foreach() gemeint.

1 Answer

0 votes
by SoSci Survey (305k points)

Sie gehen ja alle Kombinationen durch (erstes foreach) und darin die Array-Elemente.

"Fehler im Fragebogen: Invalid argument supplied for foreach()", damit ist das 2. foreach() gemeint.

Da sollten wir als erstes herausfinden, warum das nicht funktioniert. Ergänzen Sie dafür unter der folgenden Zeile noch ein wenig debug():

$data = $kombinationen[$code];
debug($code);
debug($data);

Das Abspeichern ist dann vergleichsweise einfach. Sie benötigen dafür ein paar interne Variablen. So viele, wie Sie Zettel aus AP10 ziehen. Darin jeweils 4 Variablen (Items). Diese können Sie z.B. wie folgt zuordnen:

$save = [
  'AP10x1' => 'IV01',
  'AP10x2' => 'IV02',
  'AP10x3' => 'IV03'
];

Und dann können Sie das direkt in der inneren foreach-Schleife verwenden:

      foreach ($data as $i => $text) {
        replace('%'.$varID.'_'.($i+1).'%', $text);
        put(id($save[$varID], $i + 1), $text);
      }

$save[$varID] liefert die Kennung der internen Variablen-Frage aus der gerade vorher definierten Liste. Und mittels id() wird innerhalb der Frage eine der 4 Variablen adressiert.

by s155949 (160 points)
Danke für die Hilfe!
Die Hinweise von debug() sind wie folgt:
$code = (string)
$data -> keine Daten (null)
by SoSci Survey (305k points)
Gute, dass $code keinen Inhalt hat, ist definitiv ein Problem. Was wird von dem

debug($variants);

zwei Zeilen weiter oben (lt. Ihrem Code in der Frage) ausgegeben?

Nur zur Sicherheit: Die Frage AP10 haben Sie auf die Seite gezogen, sodass die Ziehung erfolgt, ja?
by s155949 (160 points)
Danke, dass hat wunderbar funktioniert!

Zuerst die Frage AP10 zu oberst auf der Seite, dann %AP10x01_1% etc. als Platzhalter in der Tabelle.

$safe und put() waren nicht mehr notwendig.

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

...