Skip to content
Advertisement

Why is my case within the switch query not always executed?

My Code:

for ($i = 0, $anzZeilen = count($zeilen); $i < $anzZeilen; $i++) {
    switch ($zeilen[$i]['satzart']) {
        case 10: // Bundesland
            satz10($db, $zeilen[$i]);
            break;
        case 40: // Landkreis
            satz40($db, $zeilen[$i]);
            break;
        case 60: // Kommune
            satz60($db, $zeilen[$i]);
            break;
    }
}

My test output (a small excerpt):

int(60)
Quelle :Ofterdingen | Rohdaten Ofterdingen | bereinigt :Ofterdingen | ohne sorbisch :Ofterdingen | ohne , :Ofterdingen

int(60)
Quelle :Rottenburg am Neckar, Stadt |

int(60)
Quelle :Tübingen, Universitätsstadt |

int(60)
Quelle :Ammerbuch | Rohdaten Ammerbuch | bereinigt :Ammerbuch | ohne sorbisch :Ammerbuch | ohne , :Ammerbuch

The corresponding variable is integer and 60. | dump($zeilen[$i][‘satzart’])

And I have no idea why the function satz60() is not executed. (This can be seen in the test output, that no further values are output.)

It is not relevant because I did a test output before calling satz60(), but this is what the code of the called function looks like including auxiliary outputs.

function satz60(PDO $db, array $zeilen)
{
    $bundeslandDestatis = (int) substr($zeilen['region'],0,2);
    $landkreisDestatis  = (int) substr($zeilen['region'],2,3);
    $gebietsForm        = (int) $zeilen['schluessel'];
    if (in_array($gebietsForm, [60,61,62,63,64])) {
        $gemeindeName = bereinigeGebietsname($zeilen['bezeichnung1']);
        echo ' Rohdaten '.$zeilen['bezeichnung1'].' | bereinigt :'.$gemeindeName.' | ohne sorbisch :';
        // Namenszusätze entfernen - sorbisch
        if (strpos($gemeindeName, ' / ') > 0 ) {
            $gemeindeName = substr($gemeindeName,0,strpos($gemeindeName, ' / ')) ;
        }
        echo $gemeindeName.' | ohne , :';
        // Namenszusätze nach dem , entfernen
        if (strpos($gemeindeName, ', ') > 0 ) {
            $gemeindeName = substr($gemeindeName,0,strpos($gemeindeName, ', ')) ;
        }
        echo $gemeindeName.'<br>';
        $query = 'SELECT * FROM `destatis_landkreis` WHERE `landkreis_destatis` = ''.$landkreisDestatis.'' AND `bundesland_destatis`= ''.$bundeslandDestatis.''';
        $select = $db->query($query);
        $landkreis = $select->fetch();
        if (!$landkreis['kreisfrei']) {
            $k = 1;
            while ($k < 246) {
                $spalte = 'LKM'.$k;
                if (empty($landkreis[$spalte])) {
                    $sql2 = 'UPDATE `destatis_landkreis` SET `LKM'.$k.'`= ? WHERE `landkreis_destatis`= ? AND `bundesland_destatis`=?';
                    $statement = $db->prepare($sql2);
                    $statement->execute([$gemeindeName,$landkreisDestatis,$bundeslandDestatis]);
                    $k = 246;
                }
                $k++;
            }
        }    
    }    
}

Extract from $zeilen – raw data

6020210131084160315002Ofterdingen                                                                                         64    000000015150000000518200000002581    72131       2886270766417290                           
6020210131084160365003Rottenburg am Neckar, Stadt                                                                         67    000000142260000004384300000021763    72108       2886270666417290                           
6020210131084160410041Tübingen, Universitätsstadt                                                                         67    000000108060000009150600000043546    72070*****  2886270766417290                           
6020210131084160480048Ammerbuch                                                                                           64    000000048040000001130200000005610    72119*****  2886270766417290                           

Advertisement

Answer

My error is in the line

    if (in_array($gebietsForm, [60,61,62,63,64])) {

In the source file there are further area forms, which did not appear in the file description.

So it must be -without further check-:

    if (in_array($gebietsForm, [60,61,62,63,64,65,66,67,68,69])) {
User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement