String als Name für Array in Funktion

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • String als Name für Array in Funktion

    Hallo,

    Ich habe versucht einen Quelltext zu optimieren in dem ich einen Teil der 4 mal benötigt wird in eine Funktion packe:

    PHP-Code:
    function getwords($filename$wortart)
    {
      
    $file fopen ("./$filename""r");
      
    $anzAdj=0;
      while (!
    feof($file)) {$wortart[] = fgets($file4096);$anzAdj++;}
      
    fclose ($file);
    };

    getwords("adjektive.txt","adjektive");
    getwords("substantive.txt","substantive");
    getwords("verben.txt","verben");
    getwords("ergaenzungen.txt","ergaenzungen"); 
    Nun bekomme ich beim auführen:
    Fatal error: [] operator not supported for strings in \index.php on line 8

    Was er damit meint is mir bewusst, aber wie kann ich es trotzdem so machen wie gewünscht? Das kürzt meinen Quelltext nämlich schön ab...
    Ich habe nur keine Idee wie ich dieses Problem lösen kann.

    Danke für eure Hilfe im vorraus!!

    Flo

  • #2
    Wenn du an einer Stringvariable etwas anhängen willst, verwende einfach den .= Operator. Sonst verwende halt ein Array.

    Allerdings verstehe ich nicht, warum du der Funktion noch die Wortart übergibtst. Das interessiert sie doch - in der jetzigen Form - überhaupt nicht.

    Kommentar


    • #3
      Ich habe verscuht das hier zu ersetzen:

      $anzSub=0;
      $file = fopen ("./substantive.txt", "r");
      while (!feof($file)) {$substantive[] = fgets($file, 4096);$anzSub++;}
      fclose ($file);

      $anzVer=0;
      $file = fopen ("./verben.txt", "r");
      while (!feof($file)) {$verben[] = fgets($file, 4096);$anzVer++;}
      fclose ($file);

      ich verwende die Arrays $substantive[], $verben[] usw. später noch weiter und ich wollte igentlich nur das was ich so gemacht hab in ne Funktion packen, das is mir aber net so gelungen, und nun wüsst ich gern wies richtig geht...

      Danke schonmal für die Hilfe.

      Kommentar


      • #4
        Welches ist der Sinn Deines Vorgehens?!
        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Kommentar


        • #5
          Das Problem ist, das Du in deinem Script 2 Mal die Var wortart definierst.

          Einmal beim Funktionsstart:

          PHP-Code:
          function getwords($filename$wortart
          und dann als array
          PHP-Code:
          while (!feof($file)) {$wortart[] = fgets($file4096);$anzAdj++;} 
          Benutze oben oder unten eine andere und es wird funzen.....

          Ich sehe aber aus der Funktion noch keine Rückgabewerte (return).
          Was erwartest Du von der Funktion

          Kommentar


          • #6
            Ist ein Zufallsgedichtgenerator der aus *.txt Dateien die Wörter ausliest und diese dann zu einem witzigen gedicht zusammenfügt.

            War eine Übung in Informatik in der Schule und ich setze das ganze nun in PHP für unsere Jahrgangsseite um.

            An sich funktionierts ja, wollt das einlesen der Dateien nur ganz attraktiv in ne Funktion verpacken und daran häng ich jetzt.

            Flo

            Kommentar


            • #7
              Laß Dich nicht verwirren ... was willst Du eigentlich mit $anzSub bzw. $anzVer ... ?

              Die Datei selbst ließt Du besser mit einem einfachen

              $adjektive = file("adjektive.txt");

              ein ...
              carpe noctem

              [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
              [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

              Kommentar


              • #8
                PS

                Das was Du vorhattest würde beispielsweise (wenn auch vollkommen Sinnfrei) entweder so:

                $$wortart[]

                oder so

                $GLOBALS[$wortart]

                funktionieren, ersteres allerdings nur wenn die Wortarte-Arrays innerhalb der Funktion als global deklariert worden wären ...

                Sinnvoller jedoch wäre entweder eine Parameterübergabe als Referenz (by reference) mit
                PHP-Code:
                function getwords($filename, &$wortart
                bzw. die Rückgabe des Ergebnisses als Funktionsrückgabewert ...

                z.b.:
                PHP-Code:
                function getwords($filename) {
                   
                $result = array();
                   ...
                   return 
                $result;

                carpe noctem

                [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                Kommentar


                • #9
                  goth:

                  liege ich falsch mit meiner aussage?
                  Ich habe immer das beschriebene Problem, wenn ich ähnliches versuche.
                  und in der Funktion ist ja auch die übergabe an die Funktion wortart föllig überflüssig.....

                  Ich lerne gerne dazu

                  Kommentar


                  • #10
                    So, hab das ganze dann mal nach deinem Tip gestaltet:

                    PHP-Code:
                    $adjektive file("adjektive.txt");
                    $anzAdj count ($adjektive);
                    $substantive file("substantive.txt");
                    $anzSub count ($substantive);
                    $verben file("verben.txt");
                    $anzVer count ($verben);
                    $ergaenzungen file("ergaenzungen.txt");
                    $anzErg count ($ergaenzungen); 
                    Das is jetzt nur das einlesen. So ist es viel besser, kürzer, einfacher und übersichtlicher und das noch in ne Funktion zu packen lohnt net wirklich, allein die 4 mal aufzurufen wär schon mehr Quelltext

                    Also dann mal vielen Dank für eure Hilfe. Dieses Board is echt Klasse wenn man mal Hilfe sucht.

                    Flo

                    Kommentar


                    • #11
                      Original geschrieben von Peacie
                      goth:

                      liege ich falsch mit meiner aussage?
                      Ich habe immer das beschriebene Problem, wenn ich ähnliches versuche.
                      und in der Funktion ist ja auch die übergabe an die Funktion wortart föllig überflüssig.....

                      Ich lerne gerne dazu
                      Teilweise hast Du Recht ... es wäre wie gesagt am sinnvollsten die Funktion das Ergebnis schlichtweg als Rückgabewert liefern zu lassen ... .

                      Letztlich ist das was er versucht hat möglich ... nur die Umsetzung war falsch ... er wollte als String einen Variablennamen über geben ... Variable variables ist dabei das Stichwort ... wie gesagt in diesem Falle nur relativ Sinnfrei möglich ...

                      Mit der Fehlermeldung hast Du vollkommen Recht die Variable $wortart was implizit als String deklariert (übergabe eines Strings an die Funktion) ... und nun hat er versucht sie als Array zu verwenden ... (der Zugriff auf einzelne Zeichen eines String erfolgt schließlich nicht per [] sondern {})
                      carpe noctem

                      [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                      [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                      Kommentar


                      • #12
                        Danke Dir.

                        Erklärung Top

                        Kommentar

                        Lädt...
                        X