[PHP] FOR Schleife - Logik?

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Neo311087, 2. Dezember 2010 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 2. Dezember 2010
    FOR Schleife - Logik?

    Hallo zusammen,

    Ich hab ein kleines Script geschrieben welches mir eine Textdatei in ein Array packt und dieses nach verschiedenen Stichwörtern durchsuchen soll. Das macht es auch, es gibt mir dann auch die Zeilen mit den Stichwörtern aus, jedoch bringt er zwischen den einzelnen Ausgaben wiederholt den Fehler:

    Code:
    Warning: preg_match() [function.preg-match]: Empty regular expression in C:\xampplite\htdocs\XXX\XXXX.php on line 35
    
    Das Script sieht wie folgt aus:

    PHP:
    <? php
    $file_path 
    "c:/xampplite/htdocs/XXXX/XXXX/" ;
    $open_dir  opendir ( $file_path );


    $search [ 0 ] =  "/STICHWORT/"
    $search [ 1 ] =  "/STICHWORT2/"

    //USW, insgesamt 14 Stichwörter


    while ( $file  readdir ( $open_dir )) 
            {
              
              if ((
    $file  !=  '.' ) && ( $file  !=  '..' ))
              {
                
    $inhalt  file ( $file_path . $file );
                echo 
    $file . "<br><br>" ;
                for(
    $x = 0 ; $x <= count ( $search ); $x ++)
                  {
                    for(
    $y = 0 ; $y <= count ( $inhalt ); $y ++)
                      {
                        if (isset(
    $search [ $x ]))
                          {
                            if (
    preg_match ( $search [ $x ],  $inhalt [ $y ]) ==  true )
                              {
                                echo 
    $inhalt [ $y ]. "<br>" ;
                                
    flush ();
                              }
                          }
                      }
                  }
              }
              echo 
    "<br>" ;
            }
    ?>
    Ich konnte den Fehler hier mittels dem Code
    PHP:
       if (isset( $search [ $x ])) 
    beseitigen, da ich denke das ich weiß wie der Fehler entsteht, und zwar wenn er halt bei der preg_match Funktion kein Stichwort mehr in der $search Variable zum durchsuchen hat.

    Die große Frage die ich mir Stelle: WARUM?!

    Ich sag ihm bei der ersten Schleife doch er soll diese so oft ausführen wie Werte in dem Array stehen ( in diesem Fall 14 mal ). Das heisst für mich die 2te Schleife ( Größe unbekannt, variiert halt nach Größe der Textdatei ) wird auch nur 14 mal aufgerufen ( und jedesmal wenn sie aufgerufen wird hat sie die gleiche $search Variable, da ja $y in dieser Schleife hoch gezählt wird und nicht $x ), das heisst der Fehler der auftritt, sollte nicht auftreten, da ihm jedesmal eine $search Variable mitgegeben wird.

    Kann mir das bitte einer erklären, ich zweifel grad ganz stark an meinem logischen Denken...

    VG

    Neo
     
  2. 2. Dezember 2010
    AW: FOR Schleife - Logik?

    Du hast da 2 For-Schleifen verschachtelt. D.h. "$y" läuft zuerst durch und "$x" wartet, bis "$y" durchgelaufen ist.
     
  3. 2. Dezember 2010
    AW: FOR Schleife - Logik?

    Ja sicher soll $y durchlaufen, sonst würde ja auch nicht die ganze Textdatei durchsucht werden, sie soll insgesamt 14 mal durchlaufen werden.
     
  4. 2. Dezember 2010
    AW: FOR Schleife - Logik?

    probiers mal damit:
    PHP:
    <? php
    $file_path 
    "c:/xampplite/htdocs/XXXX/XXXX/" ;
    #$open_dir = opendir($file_path);


    $search [ 0 ] =  "/STICHWORT/"
    $search [ 1 ] =  "/STICHWORT2/"

    //USW, insgesamt 14 Stichwörter

    foreach( scandir ( $file_path ) as  $file ) {
        if(
    is_dir ( $file ))
            continue;
        
        foreach(
    file ( $file_path  $file ) as  $line )
            foreach(
    $search  as  $regex )
                if(
    preg_match ( $regex $line ) >  0
                    echo 
    $line '<br />' ;
                    
        print 
    '<br />' ;
        
    flush ();
    }
     
  5. 2. Dezember 2010
    AW: FOR Schleife - Logik?

    Funktioniert, aber tat meins ja auch^^ Kannst du mir einmal erklären wieso ich den Fehler bekommen habe?
     
  6. 2. Dezember 2010
    AW: FOR Schleife - Logik?

    PHP:
    for( $x  0 $x  <=  count ( $search );  $x ++)
    deswegen.

    richtig wäre:
    PHP:
    for( $x  0 $x  count ( $search );  $x ++)
    und als tipp: funktions-aufrufe im zweiten statement vermeiden und lieber ++$ als $++ verwenden:
    PHP:
    for( $x  0 $l  count ( $search );  $x  $l ; ++ $x )
    --

    den fehler machst du dort nochmal:
    PHP:
    for( $y = 0 ; $y <= count ( $inhalt ); $y ++)
    du fängst bei 0 zum zählen an, musst also bis (count($array) - 1) durchlaufen.
     
  7. 3. Dezember 2010
    AW: FOR Schleife - Logik?

    Danke, ist logisch.. ich .

    Eine Frage hab ich noch: das Array ist ja so aufgebaut das jeder Wert eine bestimmte "ID" hat.
    Also $array[0] = bla. $array[1] = blubb usw. Wie kann ich in der Schleife auf diese ID zugreifen bei der die Schleife grad ist.

    VG

    Neo
     
  8. 3. Dezember 2010
    AW: FOR Schleife - Logik?

    ja mit $i bzw. $y ^^

    wenn der array assoziativ ist musst mit foreach arbeiten. da gibts dann den => operator zusätzlich zum "as" um den index zu erfassen:

    PHP:
    $array  = array( 'foo'  =>  'bar' );
    foreach(
    $array  as  $index  =>  $wert ) {
        
    // $index == 'foo'
        // $wert == 'bar'
    }
     
  9. 3. Dezember 2010
    AW: FOR Schleife - Logik?

    soll heißen

    PHP:
    $array  = array( 'foo' 'bar' );
    for(
    $y = 0 ; $y < count ( $array ); $y ++)  {
      echo 
    $array [ $y ];
    }
    // edit
    oh murdoc hat noch ein beispiel gemacht
     
  10. 3. Dezember 2010
    AW: FOR Schleife - Logik?

    Nun passts Vielen Dank!
     
  11. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.