Anonym: Array aus .txt erstellen

Hallo,

ich habe ein Problem. Ich will eine .txt auslesen und als array benutzen für eine spätere Fallunterscheidung. Das klappt auch.
Nur geht das ganze nur mit einem Wert, bzw. einer Zahl.
Wenn ich in die .txt schreibe 1,2,3 oder 1;2;3 oder "1","2" geht garnichts
Nur mit einer Zahl gehts.

  
$ZT = file("Array.txt");  
{  
$ZTA = utf8_encode($ZT[0]);  
}  
  
$array = array($ZTA);  
  
  
if(in_array($B,$array))  
{  
	include ('Fall1.php');  
  

Kann mir jemand sagen, was ich falsch mache bzw. in die .TXT schreiben soll

  1. Hallo Anonym,

    $ZT = file("Array.txt"); // Hier hast du bereits ein Array aller in deiner Text-Datei befindlichen Zeilen
    { // wozu machst du hier eine geschweifte Klammer auf?
    $ZTA = utf8_encode($ZT[0]); // Was bedeutet das oder was möchtest du erreichen?
    } // siehe oben
    $array = array($ZTA); // Was bedeutet das oder was möchtest du erreichen?
    if(in_array($B,$array))
    {
    include ('Fall1.php');

      
    
    > Kann mir jemand sagen, was ich falsch mache bzw. in die .TXT schreiben soll  
      
    Also prinzipiell vermute ich, dass du die verscheidenen Zeichen einfach untereinander notieren müsstest um zu erreichen, was du möchtest. File() schreibt aus einer Textdatei ein Array pro Zeile.  
      
    Beispiel:  
      
    Text-Datei:  
    1  
    2  
    3  
      
    Array nach dem Einlesen mit File  
    $ZT[0]=1  
    $ZT[1]=2  
    $ZT[2]=3  
      
    Als nächstes vermute ich, dass du eine Fallunterscheidung machen möchtest. Dies könntest du gut mit [switch](http://de1.php.net/manual/de/control-structures.switch.php) abwickeln.  
    In deinem Code schaust du nur, ob die entsprechende Zahl in deinem Array vorkommt und rufst damit die Fall1.php auf. Wenn du dann mehrere Zahlen hast, würde trotzdem immer die erste Abfrage greifen.  
      
    ciao  
    romy
    
    1. Hallo Romy,

      das Problem ist, dass das ganze flexibel sein soll.
      Ich weiß noch nicht wieviele switch und cases ich einbauen müsste.
      Und $B ist auch kein fester Wert. Das ist ja gerade das was ich will.

      Ich hab jetzt
      1
      2
      3

      geschrieben und folgenden Code angewandt, aber ohne Erfolg:

        
      $ZT= file("Array.txt");  
      {  
      $ZTA= utf8_encode($ZT);  
      }  
        
      $array = array($ZTA);  
        
        
      if(in_array($B,$array))  
        
      
      
      1. Ok folgendes habe ich vor:

        Die Variable $B wird aus der URL ausgelesen.
        Geht alles wunderbar.
        Im Anschluss soll eine externe .txt hinterlegt sein, in der man Zahlen einträgt.
        Wenn dann eine Zahl gleich $B ist, soll ein Button erscheiben. Mit Include.
        Da es ja mehrere Zahlen sind ein Array.

      2. Hallo Anonym,

        geschrieben und folgenden Code angewandt, aber ohne Erfolg:

        Im Code gibt es noch unsinnige Teile, die dazu führen, dass es prinzipiell nicht gehen kann, siehe meine Kommentare bei deinem Code oder Martins Text.
        Der Code schränkt das Array immer auf nur ein Element ein.

        Ich verstehe allerdings noch nicht so richtig deine Aufgabenstellung. Möchtest du die Ziffern oder Zeichen auch in dem Include-Dateinamen vorkommen lassen? Also, wenn in der eingelesenen Datei eine 1 steht, soll die Datei 1.php aufgerufen werden?

        ciao
        romy

        1. Das mit dem Include geht.
          Die Datei heißt einfach Fall1.php.

            
          $Zoomtext = file("Info/Zoom.txt");  
            
          if(in_array($Bild,$Zoomtext))  
          {  
          	include ('Zoombutton.php');  
          
          

          Wenn ich so alles einstelle, wird nur die letzte Ziffer in der Fallunterscheidung der .txt Datei beachtet?!

          1. Das mit dem Include geht.
            Die Datei heißt einfach Fall1.php.

            $Zoomtext = file("Info/Zoom.txt");

            if(in_array($Bild,$Zoomtext))
            {
            include ('Zoombutton.php');

            
            >   
            > Wenn ich so alles einstelle, wird nur die letzte Ziffer in der Fallunterscheidung der .txt Datei beachtet?!  
              
            Besser gesagt wenn in der .txt  
            1  
            2  
            3  
            4  
            steht, funktioniert nur die Fallunterscheidung bei 4  
            und alles andere geht nicht. Und wenn ne andere ..txt online ist, geht garnicht!?!
            
          2. Hallo,

            $Zoomtext = file("Info/Zoom.txt");

            if(in_array($Bild,$Zoomtext))
            ...

            Wenn ich so alles einstelle, wird nur die letzte Ziffer in der Fallunterscheidung der .txt Datei beachtet?!

            das liegt daran, dass jedes Element von $Zoomtext ein String ist, der als letztes Zeichen noch den Zeilenumbruch enthält, in_array() aber auf Gleichheit prüft. Du kannst aber das Flag FILE_IGNORE_NEW_LINES beim Aufruf von file() mit angeben, dann werden die Zeilenumbrüche nicht mit gespeichert. Das sollte dir weiterhelfen.

            Ciao,
             Martin

            --
            "Drogen machen gleichgültig."
             - "Na und? Mir doch egal."
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
            1. Auch mit dem Ignorieren der Umbrüche folgender Sachverhalt:

              Wenn in der .txt
              1
              2
              3
              4
              steht, funktioniert nur die Fallunterscheidung bei 4
              und alles andere geht nicht. Und wenn ne andere .txt online ist, geht garnichts!?!

            2. Aber braucht das Ignorieren von Umbrüchen nicht PHP 5 ?
              Weil ich habe nur 4.4.9

              1. Heureka es geht!!!
                Musste nur auf PHP 5 umstellen mit .htaccess und die FILE_IGNORE_NEW_LINES
                einfügen!!!

                Danke aber euch für die schnelle Hilfe!!

                1. Hi,

                  Heureka es geht!!!
                  Musste nur auf PHP 5 umstellen ...

                  das war so oder so eine gute Entscheidung; immerhin ist PHP5 seit mindestens 8 Jahren Stand der Dinge, und ich wüsste keinen Grund, noch an einer alten Version festzuhalten. Einzige Ausnahme: Alte Projekte, die auf Eigenheiten von PHP4 angewiesen sind und deren Überarbeitung einen riesigen Aufwand bedeuten würde.

                  Davon abgesehen lese ich aus der Manual-Seite zu file() nirgends heraus, dass die Flags FILE_IGNORE_NEW_LINES und Co. erst ab PHP5 zur Verfügung stehen - die Einschränkung gilt AFAIS nur für den optionalen dritten Parameter context ... ah, jetzt seh ich's, im Changelog. Okay, dann haste recht.

                  Danke aber euch für die schnelle Hilfe!!

                  Keine Ursache, schließlich war ja gerade Weihnachten. *g*

                  Ciao,
                   Martin

                  --
                  Warum können wir heute so sicher sagen, dass Gott keine Frau sein kann?
                  Weil dann nach "Es werde Licht" der nächste Satz "Wie sieht denn das hier aus?!" gewesen wäre.
                  Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        2. Hallo,

          Im Code gibt es noch unsinnige Teile, die dazu führen, dass es prinzipiell nicht gehen kann, siehe meine Kommentare bei deinem Code oder Martins Text.
          Der Code schränkt das Array immer auf nur ein Element ein.

          richtig, und die Anwendung von utf8_encode erfüllt auch *wirklich* keinen Zweck, wenn der erlaubte Dateiinhalt nur aus Zahlen und Zeilenumbrüchen besteht; utf8_encode() würde damit nur unerlaubte Zeichen in anderen, ebenso unerlaubten Zeichenschrott umwandeln.

          Ich verstehe allerdings noch nicht so richtig deine Aufgabenstellung. Möchtest du die Ziffern oder Zeichen auch in dem Include-Dateinamen vorkommen lassen? Also, wenn in der eingelesenen Datei eine 1 steht, soll die Datei 1.php aufgerufen werden?

          Halte ich für irrelevant, weil man die Dateinamen, die man für ein include "zusammanbastelt", so oder so auf Gültigkeit überprüfen sollte. Am besten fände ich für den Fall eine Liste (ein Array) der zulässigen include-Dateinamen - aber das greift schon wieder drei oder vier Schritte vor. ;-)

          So long,
           Martin

          --
          Niemand ist überflüssig: Er kann immer noch als schlechtes Beispiel dienen.
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. Hi,

    ich habe ein Problem. Ich will eine .txt auslesen und als array benutzen für eine spätere Fallunterscheidung. Das klappt auch.
    Nur geht das ganze nur mit einem Wert, bzw. einer Zahl.
    Wenn ich in die .txt schreibe 1,2,3 oder 1;2;3 oder "1","2" geht garnichts
    Nur mit einer Zahl gehts.

    mit "die .txt" meinst du vermutlich eine Textdatei?
    Okay. Wie sieht denn dein Datenformat aus? Davon hängt es selbstverständlich ab, wie du die Datei lesen und aufbereiten musst.

    $ZT = file("Array.txt");

    Damit hast du den Dateiinhalt im Array $ZT, jede Zeile ein Arrayelement.

    {
    $ZTA = utf8_encode($ZT[0]);
    }

    Mit Klammern einen neuen Block aufzumachen, ohne dass irgendeine Kontrollanweisung (for, while, do oder ähnliches) benutzt wird, ist eigenartig und nutzlos, aber nicht verboten. Nach diesem Block hast du also die erste Zeile aus deiner Eingabedatei in $ZTA, wobei das utf8_encode() sehr wahrscheinlich Unfug ist. Wenn du UTF-8 haben willst, solltest du am besten gleich so speichern.

    $array = array($ZTA);

    Das ergibt wieder ein Array, aber mit nur einem Element - nämlich immer noch der ersten Zeilen aus deiner Datei. Wozu?

    if(in_array($B,$array))
    {
    include ('Fall1.php');

    Auf ein ein-elementiges Array in_array() anzuwenden, sieht für mich auch eher unsinnig aus. Es scheint, dass dir prinzipiell noch der Überblick fehlt. Daher nochmal die Frage: Was hast du eigentlich genau vor? In Worten bitte, nicht in Code.

    Ciao,
     Martin

    --
    Alle wollen unser bestes.
    Aber das kriegen sie nicht.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(