carsten schlichting: Funktion will nicht funktionieren, index, buchstaben

Hallo

wollte fragen, ob jemand zufällig weiß warum meine Funktion nicht funktioniert---warum wahrscheinlich return die Variable $string_brief_index nicht überschriebt???

die for_Schleife am ende gibt die gewünschte anzahl von indexen aus. Aber leider werden die indexe nicht hochgezählt, sondern sie bleiben immer gleich.

Die Indexe sollen folgendes format haben:

briefe_aaaa_aaaa

der nächste index wäre dann
briefe_aaaa_aaab

if($xs_db_num_row_briefe_index == 1){
      //Tabelle_ALLEE_ERGEBNISSE_GENERIREN
     $xs_db_ergebnis_briefe_index=mysql_fetch_assoc($xs_db_querry_briefe_index);
     $string_brief_index=$xs_db_ergebnis_briefe_index['brief_index'];
     //funktion um index eins höher zu stellen
     function briefe_index_eins_mehr($string){
      $zaehler=15;
      $stop=0;
      while($stop=0){
       switch ($string{$zaehler}){
        case "a":  $string{$zaehler}="b";$stop=1;break;
        case "b":  $string{$zaehler}="c";$stop=1;break;
        case "c":  $string{$zaehler5}="d";$stop=1;break;
        case "d":  $string{$zaehler}="e";$stop=1;break;
        case "e":  $string{$zaehler}="f";$stop=1;break;
        case "f":  $string{$zaehler}="g";$stop=1;break;
        case "g":  $string{$zaehler}="h";$stop=1;break;
        case "h":  $string{$zaehler}="i";$stop=1;break;
        case "i":  $string{$zaehler}="j";$stop=1;break;
        case "j":  $string{$zaehler}="k";$stop=1;break;
        case "k":  $string{$zaehler}="l";$stop=1;break;
        case "l":  $string{$zaehler}="m";$stop=1;break;
        case "m":  $string{$zaehler}="n";$stop=1;break;
        case "n":  $string{$zaehler}="o";$stop=1;break;
        case "o":  $string{$zaehler}="p";$stop=1;break;
        case "p":  $string{$zaehler}="q";$stop=1;break;
        case "q":  $string{$zaehler}="r";$stop=1;break;
        case "r":  $string{$zaehler}="s";$stop=1;break;
        case "s":  $string{$zaehler}="t";$stop=1;break;
        case "t":  $string{$zaehler}="u";$stop=1;break;
        case "u":  $string{$zaehler}="v";$stop=1;break;
        case "v":  $string{$zaehler}="w";$stop=1;break;
        case "w":  $string{$zaehler}="x";$stop=1;break;
        case "x":  $string{$zaehler}="y";$stop=1;break;
        case "y":  $string{$zaehler}="z";$stop=1;break;
        case "z":  $string{$zaehler}="a";
           $zaehler--;
           switch($zaehler){
           case 11: $zaehler=10;break;
           case 6: $zaehler=5;break;
           };
           break;
       };
      };
      return($string);
     };

//Tabelle indexe_zum_drucken
     $xs_ta_briefe_indexe_drucken='
         <table width="100%" border="0px" class="schrift_table_briefe">';
     for($i=0;$i<$xs_brief_indexe_in;$i++){

$xss_briefe_indexe_neu_in[$i]=briefe_index_eins_mehr($string_brief_index);

$xs_ta_briefe_indexe_drucken.='
           <tr height="35px">
           <td width="20px"></td>
              <td style="color:white;font-size:10pt;font-weight:500;">'.$xss_briefe_indexe_neu_in[$i].'</td>
            </tr>';
     };
     $xs_ta_briefe_indexe_drucken.='
         </table>';
    };     };

Vielleicht weiß ja jemand woran dass liegen könnte??

grüßeund danke für den fall
  carsten

  1. hi,

    $stop=0;
          while($stop=0){

    Diese Schleife wird nicht ein Mal durchlaufen - weil du hier die _Zuweisung_ $stop=0 machst, und der logische Wert dieser Zuweisung evaluiert zu false.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. hi,

      $stop=0;
            while($stop=0){

      Diese Schleife wird nicht ein Mal durchlaufen - weil du hier die _Zuweisung_ $stop=0 machst, und der logische Wert dieser Zuweisung evaluiert zu false.

      Hi

      klaro muß natürlich
      while($stop==0){ ...heißen.

      jetzt wird eins weiter gezählt, aber die überschreibung der Variable $string_brief_index funktioniert komischer_weise nicht.

      wenn die for_Schleife z. B. 8 mal durchlaufen wird, wird 8 mal derselbe index ausgegeben.

      Hier hätte ich gedacht, das return die Variable überschreibt.

      also danke und grüße

      carsten

      1. jetzt wird eins weiter gezählt, aber die überschreibung der Variable $string_brief_index funktioniert komischer_weise nicht.

        wenn die for_Schleife z. B. 8 mal durchlaufen wird, wird 8 mal derselbe index ausgegeben.

        Hier hätte ich gedacht, das return die Variable überschreibt.

        also das return überschreibt tatsächlich die variable nicht. so habe ich den neuen index nachdem funktions_aufruf manuell in die variable geschrieben.

        jetzt funktioniert es.

        also grüße

        carsten

      2. hi,

        Hier hätte ich gedacht, das return die Variable überschreibt.

        return überschreibt gar nichts, sondern gibt einen Wert zurück.

        Was _du_ dann mit dieser Rückgabe machst, hängt von _dir_ ab.

        $xss_briefe_indexe_neu_in[$i]=briefe_index_eins_mehr($string_brief_index);

        Hier weist du die Rückgabe deiner Funktion briefe_index_eins_mehr(), mit dem Parameter $string_brief_index aufgerufen, dem Array-Element $xss_briefe_indexe_neu_in[$i] zu. Dieses Array-Element ist also bei diesem Statement das jenige, dessen Wert sich ändert.

        Warum sollte $string_brief_index sich an dieser Stelle ändern - weil die Funktion mit return etwas zurückgibt? Nein.

        Skalare Variablen werden beim Funktionsaufruf immer als Kopie übergeben (call by value) - selbst wenn du innerhalb der Funktion den Wert veränderst, veränderst du damit nicht den Wert des "Originals".

        Wenn du wolltest, _dass_ eine Änderung innerhalb der Funktion auch den Wert außerhalb ändert, dann müsstest du die Variable als Referenz übergeben - call by reference.

        Weiteres dazu unter http://www.php.net/manual/de/functions.arguments.php und http://www.php.net/manual/de/language.references.php.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. echo $begrüßung;

          Skalare Variablen werden beim Funktionsaufruf immer als Kopie übergeben (call by value) - selbst wenn du innerhalb der Funktion den Wert veränderst, veränderst du damit nicht den Wert des "Originals".

          Nicht nur skalare Variablen, auch nichtskalare Variablen (Array, Objekt) werden als Kopie übergeben. Objekte werden erst ab PHP5 als Referenz übergeben (Arrays nicht).

          Wenn du wolltest, _dass_ eine Änderung innerhalb der Funktion auch den Wert außerhalb ändert, dann müsstest du die Variable als Referenz übergeben - call by reference.

          Stimmt schon, aber das ist meist nicht die Lösung des Problems, wenn man noch nicht mal Ahnung vom grundlegenden Funktionsprinzip von Funktionen unter PHP hat.

          echo "$verabschiedung $name";