mehrdimensionales array einlesen - aber wie?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • mehrdimensionales array einlesen - aber wie?

    Ich möchte folgendes in ein mehrdimensionales array aus einer Datei einlesen:

    a,b,c
    x,y,z

    folgender code zeit aber leider kein nur einen wert in $teilx:
    [php]
    $lines = file('/var/www/web22/log/news_1.txt');
    $lines = array_values($lines);

    foreach ($lines as $num => $wert) {
    $teil = explode('|',$wert);

    foreach ($teil as $teilx) {
    echo $teilx." : <br>\n";
    }
    array($teilx);
    }
    var_export($teilx);[⁄php]

    Wie bekomme ich alle Zeilen als Datei eingelesen, dass das array so aussieht?

    array(
    array(a,b,c),
    array(x,y,z));

  • #2
    auf die schnelle.
    PHP Code:
    // datei einlesen
    $file file_get_contents('/var/www/web22/log/news_1.txt');
    // anhand der zeilenumbrüche aufdröseln
    $line explode ("\n"$file);
    foreach (...
    usw.) 
    ggf. anstelle von "\n" ein "\r\n" oder trim setzen. und immer schön mit print_r arbeiten.

    gruß
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Comment


    • #3
      Original geschrieben von Kropff
      auf die schnelle.
      PHP Code:
      // datei einlesen
      $file file_get_contents('/var/www/web22/log/news_1.txt');
      // anhand der zeilenumbrüche aufdröseln
      $line explode ("\n"$file);
      foreach (...
      usw.) 
      ggf. anstelle von "\n" ein "\r\n" oder trim setzen. und immer schön mit print_r arbeiten.

      gruß
      peter
      Ja, ok. Danke. Die Zeilen bekomme ich auch eingelesen. Die Herausforderung ist aber gleichzeitig noch die Zeilen anhand des Trennzeichnes ',' in ein weiteres array aufzuspitten, also array im array zu erstellen. Und das macht Probleme, immernoch.

      Comment


      • #4
        Ich verstehe nur Bahnhof. Vielleicht liegts daran, dass ich mir gerade den Wanst vollgehauen habe
        Aber mal im Ernst: Was bezweckst du? Wie sehen die Daten unverarbeitet aus und wie genau soll das Ergebnis aussehen?
        Nieder mit der Camel Case-Konvention

        Comment


        • #5
          wo ist das problem? erst die zeilen anhand des umbruchs aufdröseln. und dann in einer weiteren schleife anhand des | aufdröseln und das dann in noch einer schleife verarbeiten.

          gruß
          peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Comment


          • #6
            Original geschrieben von Griecherus
            Ich verstehe nur Bahnhof. Vielleicht liegts daran, dass ich mir gerade den Wanst vollgehauen habe
            Aber mal im Ernst: Was bezweckst du? Wie sehen die Daten unverarbeitet aus und wie genau soll das Ergebnis aussehen?
            unverarbeitet:
            a,b,c
            x,y,z


            Ergebniss:
            array(
            array(a,b,c),
            array(x,y,z));

            Ziel:
            Es soll die unterschiedlichen Inhalte also a,b,c mit x,y,z verglichen werden und be Übereinstimmung ein Eintrag gelöscht werden. Hab da wohl ne Denkblockade ...

            Comment


            • #7
              PHP Code:
              $result = array();

              foreach (
              explode("\n"$lines) as $line)
              {
                  
              $result[] = explode(','$line);
              }

              echo 
              '<pre>';
              print_r($result);
              echo
              '</pre>'
              Nieder mit der Camel Case-Konvention

              Comment


              • #8
                Original geschrieben von Griecherus
                PHP Code:
                $result = array();

                foreach (
                explode("\n"$lines) as $line)
                {
                    
                $result[] = explode(','$line);
                }

                echo 
                '<pre>';
                print_r($result);
                echo
                '</pre>'
                Aha, so einfach. Danke. Hast du noch einen Tipp wie ich nur einzelne gleiche Einträge vergleichen und falls gleich diese lösche?

                a,b,c
                x,z,z

                Wenn also z.B. a und z denselben Inhalt haben. Wie lösche ich dann ein von zwei array in welchem ein gleicher Inhalt auftaucht?

                Comment


                • #9
                  Original geschrieben von janein

                  a,b,c
                  x,z,z

                  Wenn also z.B. a und z denselben Inhalt haben. Wie lösche ich dann ein von zwei array in welchem ein gleicher Inhalt auftaucht?
                  Mithilfe von array_intersect(). Die Funktion liefert die Schnittmenge der an sie übergebenen Arrays, also genau das, was du suchst. Das Löschen musst du dann noch vornehmen. Es gibt nicht für alles ne Funktion
                  Last edited by Griecherus; 25-03-2008, 21:51.
                  Nieder mit der Camel Case-Konvention

                  Comment


                  • #10
                    Original geschrieben von Griecherus
                    Mithilfe von array_intersect(). Die Funktion liefert die Schnittmenge der an sie übergebenen Arrays, also genau das, was du suchst. Das Löschen musst du dann noch vornehmen. Es gibt nicht für alles ne Funktion
                    Leider ist das nicht genau was ich suche, da ich nur bestimmte Werte des array überprüfen will. Die Arrayinhalte können also unterschiedlich sein.

                    Comment


                    • #11
                      Original geschrieben von janein
                      Leider ist das nicht genau was ich suche, da ich nur bestimmte Werte des array überprüfen will. Die Arrayinhalte können also unterschiedlich sein.
                      Ohne konkretes Beispiel oder noch besser eine Anforderungsdefinition (was genau bezweckst du) kann ich dich jetzt nur verdutzt angucken
                      Eins kann ich dir mit relativer Wahrscheinlichkeit aber schon sagen: Wenn es nicht genau das ist, was du suchst, dann wird es ein Teil der Lösung sein, das du für dein Vorhaben brauchst. Wie gesagt: Für alles gibt es keine vorgefertigten Funktionen.
                      Nieder mit der Camel Case-Konvention

                      Comment


                      • #12
                        Original geschrieben von Griecherus
                        Ohne konkretes Beispiel oder noch besser eine Anforderungsdefinition (was genau bezweckst du) kann ich dich jetzt nur verdutzt angucken
                        Eins kann ich dir mit relativer Wahrscheinlichkeit aber schon sagen: Wenn es nicht genau das ist, was du suchst, dann wird es ein Teil der Lösung sein, das du für dein Vorhaben brauchst. Wie gesagt: Für alles gibt es keine vorgefertigten Funktionen.
                        Noch einmal:
                        Position(1,2,3)
                        a,b,c
                        a,y,z


                        stammen eingelesen aus einer Datei. Nun sollen nur eine Version des eingelesenen arrays später ausgegeben werden die an Position "1" gleich sind. a,b,c oder a,y,z soll also ausgegeben werden weil "a" der gleiche Wert ist wie in einer andere Zeile "a".
                        Last edited by janein; 25-03-2008, 23:14.

                        Comment


                        • #13
                          Original geschrieben von janein
                          Noch einmal:
                          Position(1,2,3)
                          a,b,c
                          a,y,z

                          stammen eingelesen aus einer Datei. Nun soll sollen nur die Teile des eingelesenen arrays später ausgegeben werden die an Position "1" nicht gleich sind.
                          Jetzt werden se mal nicht papig

                          Und wo genau ist das Problem? Wo die eigenen Ansätze? Zeig mal einen eigenen Versuch oder wenigstens Ideen, die man weiterführen könnte.
                          Du suchst übrigens nach der Position 0, nicht 1.
                          Nieder mit der Camel Case-Konvention

                          Comment


                          • #14
                            Original geschrieben von Griecherus
                            Jetzt werden se mal nicht papig

                            Und wo genau ist das Problem? Wo die eigenen Ansätze? Zeig mal einen eigenen Versuch oder wenigstens Ideen, die man weiterführen könnte.
                            Du suchst übrigens nach der Position 0, nicht 1.
                            $lines1 = file_get_contents('/var/www/web22/log/new1.txt');
                            $lines2 = file_get_contents('/var/www/web22/log/new2.txt');
                            #$result = array_values($lines);
                            $i = 0;
                            #$lines = array();
                            foreach (explode("\n", $lines1) as $line1)
                            {
                            $result1[] = explode('|', $line1);
                            $i++;
                            }

                            foreach (explode("\n", $lines2) as $line2)
                            {
                            $result2[] = explode('|', $line2);
                            }

                            echo '<pre>';
                            #print_r($result);
                            echo'</pre>';

                            #$result1 = array('a','b','c');
                            #$result2 = array('x','y','a');
                            $result = array_merge($result1, $result2);
                            echo '<pre>';
                            print_r($result[$i][0]);
                            echo'</pre>';

                            echo $result[1][0];

                            Ich habe probiert mit $result[$i][0] auf die Position zuzugreifen, es klappt aber nicht. Mir fehlt da der logische ansatz bzw. ich auf die Positionen zugreifen kann, um diese zu vergleichen.

                            Comment


                            • #15
                              Sind die Indizies der Arrays denn numerisch? Falls ja, dann ist array_intersect nämlich durchaus das, was du suchst. Du musst nur zusätzlich überprüfen, ob die Indizes der Übereinstimmungen (im Rückgabewert enthalten) gleich 0 sind.

                              EDIT:
                              Gut, ganz so simpel ist es nicht. Siehe nächstes Posting.

                              Last edited by Griecherus; 25-03-2008, 23:34.
                              Nieder mit der Camel Case-Konvention

                              Comment

                              Working...
                              X