Martin Rozmus: funktion count und mehrdimensionale Arrays

Beitrag lesen

Nun muss ich herausfinden, ob die Funktion person_suchen() oder die Schleife(n), die die Ergebnisse der Funktion verarbeiten fehlerhaft sind :-|

Ich bin ein Stück weiter: Es liegt an der Funktion person_suchen().

Ich habe den Code etwas modifiziert, um die Ausgaben zu verfolgen:

function person_suchen($such_arr){
  $big_arr = split('[#]',$such_arr);
  $x=0;
  echo "BIGARR : ".count($big_arr)."\n\r________________________________________\n\r\n";
   for($n=0;$n<count($big_arr);$n++){
          $arr = split('[,. ;]',$big_arr[$n],3);
             //echo $arr[0]."Arr0 Scleif: ".$n."";
         if (count($arr)==1){
            $sql=
            "SELECT personen.lfd, personen.nachname,personen.vorname,
            personen.geburtstag, personengruppe.gruppe, personen.kennung
            FROM personen,personengruppe,chron_personengruppe
            WHERE personen.nachname LIKE '".$arr[0]."'
            AND (chron_personengruppe.fk_personen=personen.lfd
            AND personengruppe.lfd = chron_personengruppe.fk_personengruppe
            AND ISNULL(chron_personengruppe.bis))
            ";

}
         elseif(count($arr)==2){
            $sql=
            "SELECT personen.lfd, personen.nachname,personen.vorname,
            personen.geburtstag, personengruppe.gruppe, personen.kennung
            FROM personen,personengruppe,chron_personengruppe
            WHERE chron_personengruppe.fk_personen=personen.lfd
            AND personengruppe.lfd = chron_personengruppe.fk_personengruppe
            AND ISNULL(chron_personengruppe.bis)
            AND personen.nachname LIKE '".$arr[0]."'
            AND personen.vorname LIKE '".$arr[1]."'
            ";
         }
         elseif(count($arr)==3){
            $sql=
            "SELECT personen.lfd, personen.nachname,personen.vorname,
            personen.geburtstag, personengruppe.gruppe, personen.kennung
            FROM personen,personengruppe,chron_personengruppe
            WHERE chron_personengruppe.fk_personen=personen.lfd
            AND personengruppe.lfd = chron_personengruppe.fk_personengruppe
            AND ISNULL(chron_personengruppe.bis)
            AND personen.nachname LIKE '".$arr[0]."'
            AND personen.vorname LIKE '".$arr[1]."'
            AND personen.geburtstag LIKE '".datum_eu2us($arr[2])."'
            ";
         }
         if (isset($sql)){
            $db = mySQL_ini();
            $result = mysql_query($sql,$db);
            $i=0;
            While ($zeile= mysql_fetch_row($result)){
            echo "Ergebnisse bei durchgagn ".$n."Schleife ".$i."  ".$zeile[5]."\n\r".
                  $erg_arr[$i]=$zeile;
                  $i++;
                  $x++;
            }
            $big_erg_arr[$n]=$erg_arr;
            echo "Zeilen bei durchgagn ".$n." :".count($erg_arr)."\n\r".
            " zu suchen: ".$arr[0]."\n\r".
            "SQL: ".$sql."\n\r -->BIGarr .".$n."& ".$i.": ".$big_erg_arr[$n][$i][5]."\n\r------------\n\r";

}

}
   echo "while: ".$x."\n\n\n\r";
    if(count($big_erg_arr)==0){
       return false;
    }
    else
    {
       //echo $big_erg_arr[1][0][2];
       return $big_erg_arr;
    }
 }
  person_suchen("ro%#testmann");

Die Ausgabe sieht folgender Maßen aus:

BIGARR : 2

________________________________________

Ergebnisse bei durchgagn 0Schleife 0  gono2

ArrayErgebnisse bei durchgagn 0Schleife 1  gono8

ArrayErgebnisse bei durchgagn 0Schleife 2  gono9

ArrayErgebnisse bei durchgagn 0Schleife 3  gono11

ArrayErgebnisse bei durchgagn 0Schleife 4  gono12

ArrayErgebnisse bei durchgagn 0Schleife 5  gono13

ArrayErgebnisse bei durchgagn 0Schleife 6  gono14

ArrayZeilen bei durchgagn 0 :7

zu suchen: ro%

SQL: SELECT personen.lfd, personen.nachname,personen.vorname,
            personen.geburtstag, personengruppe.gruppe, personen.kennung
            FROM personen,personengruppe,chron_personengruppe
            WHERE personen.nachname LIKE 'ro%'
            AND (chron_personengruppe.fk_personen=personen.lfd
            AND personengruppe.lfd = chron_personengruppe.fk_personengruppe
            AND ISNULL(chron_personengruppe.bis))

-->BIGarr .0& 7:

------------

MERKWÜRDIG IST; DASS BEI DER SCHLEIFE n=1 NUR EIN ERGEBNIS ZURÜCKGEGEBEN WIRD, DIE WHILE SCHLEIFE ABER DENNOCH 7 MAL DURCHLAUFEN WIRD. WEITERHIN IST AUFFÄLLIG, DASS DIE ANZAHL DER WHILE DURCHLÄUFE BEIM DURCHGANG n=1 IDENTISCH IST MIT DER ANZAHL DER DURCHLÄUFE BEIM DURCHGANG n=0. PERSONEN MIT DEM ANFANG DES NACHNAMENS ro% SIND AUCH TATSÄCHLICH 7 MAL IN DER DB VORHANDEN. PERSONEN MIT NACHNAME testmann SIND ABER NUR 1 MAL IN DER DB VORHANDEN.
::::::::::::::::::::::::::::::::::::::::
Ergebnisse bei durchgagn 1Schleife 0  gono15

ArrayZeilen bei durchgagn 1 :7

zu suchen: testmann
::::::::::::::::::::::::::::::::::::::::::::
SQL: SELECT personen.lfd, personen.nachname,personen.vorname,
            personen.geburtstag, personengruppe.gruppe, personen.kennung
            FROM personen,personengruppe,chron_personengruppe
            WHERE personen.nachname LIKE 'testmann'
            AND (chron_personengruppe.fk_personen=personen.lfd
            AND personengruppe.lfd = chron_personengruppe.fk_personengruppe
            AND ISNULL(chron_personengruppe.bis))

-->BIGarr .1& 1: gono8

------------

while: 8