wucher wichtel: for-Schleife in Kombination mit Array funktioniert nicht

Hallo!

Ich habe ein Problem mit folgendem Code:

  
<?php  
  
$words = array('<a>', '[url]', '[link]');// In diesem Array werden verbotene Wörter gespeichert  
$wordsLength = count($words); // Die Anzahl der Elemente des Arrays  
echo "Anzahl der Werte im Array words: ".$wordsLength."<br>"; // Testausgabe um die Anzahl der Elemente zu kontrollieren  
  
function checkString($data){  
 for($i = 0; $i <= $wordsLength; $i++){  
  echo "Überprüfung der Varible i: ".$i."<br>"; // Überprüfung des Inhalts der Variablen  
  echo "Arrayausgabe: ".$words[1]."<br>"; // Überprüfung der Ausgabe des Arrays mit statischer Zahl  
  echo "Test: ".$words[$i]."<br>"; // Überprüfung der Ausgabe des Arrays mit dynamischer Zahl  
  if( eregi($words[$i], $data) ){  
   $punkte = $punkte + 1;  
  }  
 }  
echo "Punkte: ".$punkte."<br>"; // Ausgabe des Wertes von $punke - eigentlich sollte der Wert jetzt 1 sein  
}  
  
$text = "test test test <a> test test test";  
  
checkString($text);  
  
?>  

Ich möchte einen String durchsuchen. Und zwar sollen die Suchbegriffe in einem Array stehen. Könntet ihr mir bitte sagen, wo das Problem liegt?

Die Ausgabe sieht übrigens so aus:
##################################
Anzahl der Werte im Array words: 3
Überprüfung der Varible i: 0
Arrayausgabe:
Test:

Warning: eregi() [function.eregi]: REG_EMPTY in D:\xampp\xampp\htdocs\scripts\blog\class.php on line 12
Punkte:
##################################

Vielen Dank für eure Hilfe!

ciao, ww

--
Ein japanisch-deutsches Gedicht
sh:(  fo:|  ch:~  rl:(  br:>  n4:~  ie:%  mo:)  va:)  de:]  zu:)  fl:(  ss:|  ls:~  js:)
  1. Hallo!

    Ich habe ein Problem mit folgendem Code:

    <?php

    $words = array('<a>', '[url]', '[link]');// In diesem Array werden verbotene Wörter gespeichert
    $wordsLength = count($words); // Die Anzahl der Elemente des Arrays
    echo "Anzahl der Werte im Array words: ".$wordsLength."<br>"; // Testausgabe um die Anzahl der Elemente zu kontrollieren

    function checkString($data){
    for($i = 0; $i <= $wordsLength; $i++){
      echo "Überprüfung der Varible i: ".$i."<br>"; // Überprüfung des Inhalts der Variablen
      echo "Arrayausgabe: ".$words[1]."<br>"; // Überprüfung der Ausgabe des Arrays mit statischer Zahl
      echo "Test: ".$words[$i]."<br>"; // Überprüfung der Ausgabe des Arrays mit dynamischer Zahl
      if( eregi($words[$i], $data) ){
       $punkte = $punkte + 1;
      }
    }
    echo "Punkte: ".$punkte."<br>"; // Ausgabe des Wertes von $punke - eigentlich sollte der Wert jetzt 1 sein
    }

    $text = "test test test <a> test test test";

    checkString($text);

    ?>

    
    > Ich möchte einen String durchsuchen. Und zwar sollen die Suchbegriffe in einem Array stehen. Könntet ihr mir bitte sagen, wo das Problem liegt?  
    >   
    > Die Ausgabe sieht übrigens so aus:  
    > ##################################  
    > Anzahl der Werte im Array words: 3  
    > Überprüfung der Varible i: 0  
    > Arrayausgabe:  
    > Test:  
    >   
    > Warning: eregi() [function.eregi]: REG\_EMPTY in D:\xampp\xampp\htdocs\scripts\blog\class.php on line 12  
    > Punkte:  
    > ##################################  
    >   
    > Vielen Dank für eure Hilfe!  
    >   
    > ciao, ww  
      
      
    <?php  
      
    $words = array('<a>', '[url]', '[link]');// In diesem Array werden verbotene Wörter gespeichert  
    $wordsLength = count($words); // Die Anzahl der Elemente des Arrays  
    echo "Anzahl der Werte im Array words: ".$wordsLength."<br>"; // Testausgabe um die Anzahl der Elemente zu kontrollieren  
      
    function checkString($data){  
     global $words, $wordsLength;  
     for($i = 0; $i < $wordsLength; $i++){  
      echo "Überprüfung der Varible i: ".$i."<br>"; // Überprüfung des Inhalts der Variablen  
      echo "Arrayausgabe: ".$words[1]."<br>"; // Überprüfung der Ausgabe des Arrays mit statischer Zahl  
      echo "Test: ".$words[$i]."<br>"; // Überprüfung der Ausgabe des Arrays mit dynamischer Zahl  
      if( eregi($words[$i], $data) ){  
       $punkte = $punkte + 1;  
      }  
     }  
     echo "Punkte: ".$punkte."<br>"; // Ausgabe des Wertes von $punke - eigentlich sollte der Wert jetzt 1 sein  
    }  
      
    $text = "test test test <a> test test test";  
      
    checkString($text);  
      
    ?>  
      
    Du musst die globalen Variablen in der function zuerst bekannt machen.  
      
    Anzahl der Werte im Array words: 3  
    Überprüfung der Varible i: 0  
    Arrayausgabe: [url]  
    Test: <a>  
    Überprüfung der Varible i: 1  
    Arrayausgabe: [url]  
    Test: [url]  
    Überprüfung der Varible i: 2  
    Arrayausgabe: [url]  
    Test: [link]  
    Punkte: 1  
    
    
    1. Hallo!

      Du musst die globalen Variablen in der function zuerst bekannt machen.

      Ah, ok. Danke schön. Jetzt klappt's :) Danke.

      ciao, ww

      --
      Ein japanisch-deutsches Gedicht
      sh:(  fo:|  ch:~  rl:(  br:>  n4:~  ie:%  mo:)  va:)  de:]  zu:)  fl:(  ss:|  ls:~  js:)
      1. Moin,

        Ah, ok. Danke schön. Jetzt klappt's :)

        nein, noch nicht ganz. :-)

        Denn mit dieser Zeile

        for($i = 0; $i <= $wordsLength; $i++)

        prüfst du immer ein Element mehr, als dein Array überhaupt hat. Die Obergrenze in einer for-Schleife mit <= abzuprüfen, ist selten richtig.

        Übrigens - Leerzeichen zur Auflockerung des Quelltexts sind gut, keine Frage. Aber man sollte es nicht übertreiben. Du reißt mit den Leerzeichen optisch auseinander, was eigentlich zusammengehört. Findest du nicht, dass es anders gruppiert übersichtlicher aussieht:

        for ($i=0; $i<$wordsLength; $i++)

        Aber das nur nebenbei; ist natürlich Geschmackssache.
        So long,
         Martin

        --
        "Life! Don't talk to me about life!"
          (Marvin, the paranoid android in Douglas Adams' "The Hitchhiker's Guide To The Galaxy"
        1. Hallo!

          Ah, ok. Danke schön. Jetzt klappt's :)

          nein, noch nicht ganz. :-)

          *grmpf* - Danke für den Hinweis.

          Übrigens - Leerzeichen zur Auflockerung des Quelltexts sind gut, keine Frage. Aber man sollte es nicht übertreiben. Du reißt mit den Leerzeichen optisch auseinander, was eigentlich zusammengehört.

          Also ich persönlich finde es viel übersichtlicher, wie ich es geschrieben habe. Aber das liegt vorallem an der eingestellten Schriftgröße in meinem Notepad++. Bei größeren Schriftgrößen finde ich deine Version auch besser. Aber da ich bis jetzt "nur" für mich privat programmiere, ist die Hauptsache, dass es für mich passt. Wenn ich das ganze in einem Team mache, dann ist das ganze warscheinlich geregelt. Dann werde ich halt meine Schriftgröße heraufschrauben ;-)

          ciao, ww

          --
          Ein japanisch-deutsches Gedicht
          sh:(  fo:|  ch:~  rl:(  br:>  n4:~  ie:%  mo:)  va:)  de:]  zu:)  fl:(  ss:|  ls:~  js:)
          1. Hallo!

            Also, ich stelle jetzt noch eine Frage. Sie passt einigermaßen zu dem Thema, deswegen mache ich keinen neuen Thread auf, in der Hoffnung, dass ihn irgendjemand noch sieht :-)

            Es gibt Probleme, wenn in dem Array ein Wert steht, der so aussieht: [url]

            Also hat PHP Probleme, mit einem Array, der eckige Klammern beinhaltet. Ist ja auch irgendwie logisch. Aber wie kann ich das Problem beheben? Ich füge noch den Quelltext und die jeweilige Ausgabe an:

              
            $words = array('<a', '[link]', '[url]'); #, 'enlarge', 'penis', 'viagra', 'sex'  
            $wordsLength = count($words);  
              
            function checkString($data){  
             global $words, $wordsLength;  
             for($i = 0; $i < $wordsLength; $i++){  
              if( eregi($words[$i], $data) ){  
               $punkte = $punkte + 1;  
              }  
             }  
             return "Ihr Eintrag enthält ".$punkte." von den $wordsLength verbotenen Wörtern! Bitte löschen Sie diese.";  
            }  
            
            

            Ausgabe:
            ########
            Ihr Eintrag enthält 2 von den 3 verbotenen Wörtern! Bitte löschen Sie diese.
            ########

            Wenn der Array folgenden Inhalt hat...
            ######################################
            $words = array('<a', '[link', '[url');
            ######################################

            Dann kommt folgende Meldung:
            ############################
            Warning: eregi() [function.eregi]: REG_EBRACK in D:\xampp\xampp\htdocs\scripts\blog\class.php on line 63

            Warning: eregi() [function.eregi]: REG_EBRACK in D:\xampp\xampp\htdocs\scripts\blog\class.php on line 63

            Ihr Eintrag enthält von den 3 verbotenen Wörtern! Bitte löschen Sie diese.
            ############################

            Also: Wie kann ich eckige Klammern in einen Array schreiben, ohne dass es Fehler gibt?

            ciao, ww

            --
            Ein japanisch-deutsches Gedicht
            sh:(  fo:|  ch:~  rl:(  br:>  n4:~  ie:%  mo:)  va:)  de:]  zu:)  fl:(  ss:|  ls:~  js:)
            1. Hallo,

              Es gibt Probleme, wenn in dem Array ein Wert steht, der so aussieht: [url]

              Also hat PHP Probleme, mit einem Array, der eckige Klammern beinhaltet.

              Die Feststellung ist richtig, die Schlussfolgerung falsch.
              Dein Problem liegt da:

              if( eregi($words[$i], $data) )

              In Regulären Ausdrücken hat die eckige Klammer nun einmal eine Sonderbedeutung, sie klammert nämlich Zeichen_menge_, von denen jedes einzelne als Suchtreffer passen soll.

              Also: Wie kann ich eckige Klammern in einen Array schreiben, ohne dass es Fehler gibt?

              Nochmal: Mit dem Array hat das nichts zu tun. Nur da du den Wert als RegExp verwendest, musst du die Klammern mit einem vorangestellten '' maskieren.

              Ciao,
               Martin

              --
              Moskito, ergo summ.
              1. Hallo!

                Nochmal: Mit dem Array hat das nichts zu tun. Nur da du den Wert als RegExp verwendest, musst du die Klammern mit einem vorangestellten '' maskieren.

                Da wurde mir mein nicht vorhandenes Wissen über RegExp zum Verhängnis  :) Vielen Dank!

                ciao, ww

                --
                Ein japanisch-deutsches Gedicht
                sh:(  fo:|  ch:~  rl:(  br:>  n4:~  ie:%  mo:)  va:)  de:]  zu:)  fl:(  ss:|  ls:~  js:)