[PHP5] Problem mit foreach-schleifen ausgaben

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

  • [PHP5] Problem mit foreach-schleifen ausgaben

    Hallöchen,
    ich habe hier ein kleines Problem mit dem Parsen eines files.:

    hier mal das script:
    PHP-Code:
    <?php

    $links 
    file_get_contents("file.pls");

    $preg_1 '/\s+File([0-9]{1,2})=([0-9]{1,2}) - ([a-z].{1,50})/i';
    $preg_2 '/\s+Title([0-9]{1,2})=([a-z].{1,50})/i';
    $preg_3 '/\s+Length([0-9]{1,2})=([0-9]{1,10})/i';

    function 
    filtern($links,$preg_1,$preg_2,$preg_3) {
    $ausgabe '';

      
    preg_match_all($preg_1,$links,$matches_1,PREG_SET_ORDER);
      
    preg_match_all($preg_2,$links,$matches_2,PREG_SET_ORDER);
      
    preg_match_all($preg_3,$links,$matches_3,PREG_SET_ORDER);

      foreach(
    $matches_1 as $match_1)
      
    $ausgabe .= 'File'.$match_1[1].'='.$match_1[2].' - '.$match_1[3].'<br>';
      foreach(
    $matches_2 as $match_2)
      
    $ausgabe .=  'Title'.$match_2[1].'='.$match_2[2].'<br>';
      foreach(
    $matches_3 as $match_3)
      
    $ausgabe .=  'Length'.$match_3[1].'='.$match_3[2].'<br>';

      return 
    $ausgabe;
    }

    echo 
    filtern($links,$preg_1,$preg_2,$preg_3);

    ?>
    Ausgelesen wird ein Playlistfile dessen Daten erstmal nur ganz Stinknormal angezeigt werden sollen.

    Bisher klappt das auch Super nur wie bekomme Ich es am sinnvollsten hin das die Ausgaben wie folgt abgearbeitet und Ausgegeben werden:

    File1=01 - Deathrider.mp3
    Title1=Anthrax - Deathrider
    Length1=184
    File2=02 - Metal Thrashing Mad.mp3
    Title2=Anthrax - Metal Thrashing Mad
    Length2=168
    ...


    momentan schaut es nämlich so aus:
    File1=01 - Deathrider.mp3
    File2=02 - Metal Thrashing Mad.mp3
    ...
    Title1=Anthrax - Deathrider
    Title2=Anthrax - Metal Thrashing Mad
    ...
    Length1=184
    Length2=168
    Length3=327
    ...

    ...da ich ja alles hintereinander anhänge ($ausgabe .= '' ich weiß aber nicht wie ich es sonst machen soll :-/

    Ich komme mit dem verschachteln der foreach schleifen irgendwie noch nicht so zurecht.

    PS: Das ganze kann auch mit fopen realisiert werden ick wees, aber es diente atm eher als Übung mich mehr mit Regulären Ausdrücken auseinanderzusetzen



    LG
    Mausi
    Zuletzt geändert von scriptmaus; 06.12.2005, 23:43.

  • #2
    Wo sind deine Ansätze??

    Ich komme mit dem verschachteln der foreach schleifen irgendwie noch nicht so zurecht.
    Kein Problem, es existieren schließlich keine.

    Kommentar


    • #3
      Wo sind deine Ansätze??
      Meine Ansätze sind die wie folgt oben Beschrieben, ich will eine *.pls Datei auslesen und am liebsten mit preg_match_all die ersten 3 Zeilen auslesen und ausgeben, aber da ich das nicht hinbekommen habe habe ich es wie oben im Quellcode zu sehen mal so versucht.

      Kein Problem, es existieren schließlich keine.
      Bitte ?
      nur weil ich die foreach schleife nicht wie folgt formuliert habe?

      PHP-Code:
      foreach($matches_1 as $match_1){
      $ausgabe .= 'File'.$match_1[1].'='.$match_1[2].' - '.$match_1[3].'<br>';

      Wie schon erwähnt bin ich mir bez. des Aufbaus dieser abfrage unsicher daher habe ich auch hier mal um Hilfe gebeten.



      LG
      Mausi

      Kommentar


      • #4
        welch forscher ton am frühen morgen.

        Meine Ansätze sind die wie folgt oben Beschrieben,
        Keine? Du beschreibst lediglich, was du willst. Nicht, was du wie versucht hast und woran es gescheitert ist. Sieht bis jetzt nach ner Projekthilfe aus. *verschieb*

        Bitte ?
        nur weil ich die foreach schleife nicht wie folgt formuliert habe?
        Nur weil du (? ) sie nacheinander(!) formuliert hast und die Kurzschreibweise verwendest hast, handelt es sich deswegen noch lange nicht um verschachtelte foreachs

        Kommentar


        • #5
          welch forscher ton am frühen morgen.
          tja. RESONANZ ist das Zauberwort bei der Sache nech ;-)

          Keine? Du beschreibst lediglich, was du willst. Nicht, was du wie versucht hast und woran es gescheitert ist. Sieht bis jetzt nach ner Projekthilfe aus. *verschieb*
          Wie du "eigentlich" oben sehen kannst habe ich via Quellcode gezeigt was ich versucht habe und woran es gescheitert ist.

          Aber nochmal für dich zum Mitschreiben:
          => Ich will die drei ausgelesenen Zeilen direkt untereinander ausgeben lassen.
          => Dies funktioniert nicht weil ich das nur so hinbekomme das jeweils alle komplett abgearbeiteten Zeilen sich untereinander reihen:


          So ist es momentan:
          File1=01 - Deathrider.mp3
          File2=02 - Metal Thrashing Mad.mp3
          ...
          Title1=Anthrax - Deathrider
          Title2=Anthrax - Metal Thrashing Mad
          ...
          Length1=184
          Length2=168
          Length3=327
          ...

          ...und so würde ich es gerne haben:
          File1=01 - Deathrider.mp3
          Title1=Anthrax - Deathrider
          Length1=184
          File2=02 - Metal Thrashing Mad.mp3
          Title2=Anthrax - Metal Thrashing Mad
          Length2=168
          ...

          Nur weil du (? ) sie nacheinander(!) formuliert hast und die Kurzschreibweise verwendest hast, handelt es sich deswegen noch lange nicht um verschachtelte foreachs
          Mag sein das das rein (PHP Scripttechnisch) der falsche Ausdruck für das war was ich hier gemacht habe (verschachtelt) trotzalledem kann man wenn man es ja weiß lieber mal lösungsansätze bieten als plumpe "Schlauberger Sprüche" abzuliefern, denn damit ist mir nicht geholfen.



          LG
          Mausi

          Kommentar


          • #6
            Was soll ich mich mit dir rumärgern, wenn du statt 3 schleifen nur eine benutzen würdest, hast du das problem.

            dein code zeigt in keiner weise, dass du logisch versucht hast, dein ziel umzusetzen. lediglich, dass du einen (bereits fertigen) code nicht anpassen kannst oder es versucht hast.

            Kommentar


            • #7
              Was soll ich mich mit dir rumärgern, wenn du statt 3 schleifen nur eine benutzen würdest, hast du das problem.
              ist ok schreib lieber nix mehr als nur so dummes zeug wenn du eh nicht vor hast zu helfen.

              dein code zeigt in keiner weise, dass du logisch versucht hast, dein ziel umzusetzen. lediglich, dass du einen (bereits fertigen) code nicht anpassen kannst oder es versucht hast.
              Entschuldige bitte das ist mein eigener code den habe ich geschrieben und nicht runtergeladen und angepasst also spar dir deine peinlichen versuche hier übertrumpfen zu wollen mit deinem achsotollen wissen.

              ich erwarte hier hilfe und nicht dumme sprüche, wie schonmal gesagt ist mir damit nicht geholfen.




              LG
              Mausi

              Kommentar


              • #8
                OffTopic:
                hab dir nen ansatz geliefert, mehr bin ich in diesem fall aber in der tat nicht gewillt zu helfen.

                Kommentar


                • #9
                  Lass dir vor dem ersten foreach mal alle drei Arrays mit print_r ausgeben.
                  Stehen die zusammengehörigen Daten immer am selben Index?

                  Wenn ja, schau dir mal die Syntax von foreach an, da gibt's nämlich noch eine zweite Möglichkeit, wie man das nutzt.
                  Mit dieser Möglichkeit kriegst du zusätlich noch den Index und kannst dann mit einem foreach über $matches auf die entsprechenden Einträge in $matches2 und $matches3 zugreifen
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    Huhu mrhappiness,
                    erstmal thx für die nette Antwort

                    mit print_r bekomme ich wie gewohnt folgende ausgabe präsentiert:
                    PHP-Code:
                    Array (
                            [
                    0] => File1=01 Deathrider.mp3
                            
                    [1] => 1
                            
                    [2] => 01
                            
                    [3] => Deathrider.mp3
                          
                    )

                    Array (
                            [
                    0] => File2=02 Metal Thrashing Mad.mp3
                            
                    [1] => 2
                            
                    [2] => 02
                            
                    [3] => Metal Thrashing Mad.mp3
                          
                    )
                    ... 
                    Wie könnte ich denn nun am besten via preg_match_all den Regulären-Ausdruck so erweitern das ich die ersten 3 zeilen...
                    PHP-Code:
                    File1=01 Deathrider.mp3
                    Title1
                    =Anthrax Deathrider
                    Length1
                    =184 
                    ... in einem durchlauf auslesen kann?

                    hab mich heute morgen schonmal mit folgendem bsp aus dem manual vertraut gemacht:

                    PHP-Code:
                    $arr = array("eins""zwei""drei");
                    reset ($arr);
                    while (list(
                    $key$value) = each ($arr)) {
                       echo 
                    "Schlüssel: $key; Wert: $value<br />\n";
                    }

                    foreach (
                    $arr as $key => $value) {
                       echo 
                    "Schlüssel: $key; Wert: $value<br />\n";

                    Aber irgendwie will das nicht mit meinem obigen bsp. hinhauen, wenn ich gleich wieder zuhause bin poste ich mal beim bsp. von heute Morgen zur begutachtung


                    LG
                    Mausi

                    Kommentar


                    • #11
                      Was gibt
                      PHP-Code:
                      foreach($matches_1 as $key => $match_1) {
                        
                      $ausgabe .= 'File'.$match_1[1].'='.$match_1[2].' - '.$match_1[3].'<br>';
                        
                      $ausgabe .=  'Title'.$matches_2[$key][1].'='.$matches_2[$key][2].'<br>';
                        
                      $ausgabe .=  'Length'.$matches_3[$key][1].'='.$matches_3[$key][2].'<br>';

                      aus?
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        Juchu es hat geklappt *gggg*
                        danke danke danke

                        Ich hatte eigentlich den selben Ansatz wie du gehabt nur habe ich versucht weiterhin für jede Zeile eine foreach-schleife einzuleiten *klatsch*

                        danke nochmals mrhappiness



                        LG
                        Mausi

                        Kommentar


                        • #13
                          Deswegen habe ich ja
                          Original geschrieben von mrhappiness
                          und kannst dann mit einem foreach über $matches auf die entsprechenden Einträge in $matches2 und $matches3 zugreifen
                          Ich denke, also bin ich. - Einige sind trotzdem...

                          Kommentar

                          Lädt...
                          X