mehrdimensionales array einlesen - aber wie?

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

  • 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

    Kommentar


    • #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.

      Kommentar


      • #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

        Kommentar


        • #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

          Kommentar


          • #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 ...

            Kommentar


            • #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

              Kommentar


              • #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?

                Kommentar


                • #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
                  Zuletzt geändert von Griecherus; 25.03.2008, 22:51.
                  Nieder mit der Camel Case-Konvention

                  Kommentar


                  • #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.

                    Kommentar


                    • #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

                      Kommentar


                      • #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".
                        Zuletzt geändert von janein; 26.03.2008, 00:14.

                        Kommentar


                        • #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

                          Kommentar


                          • #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.

                            Kommentar


                            • #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.

                              Zuletzt geändert von Griecherus; 26.03.2008, 00:34.
                              Nieder mit der Camel Case-Konvention

                              Kommentar

                              Lädt...
                              X