merhdimensionale arrays

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

  • merhdimensionale arrays

    Hi,

    ohne mein php buch neben mir bin ich echt aufgeschmissen.

    Ich habe ein csv file im format
    rubrik,name,code

    Ich möchte mit fgetcsv gerne folgendes array $data erzeugen und dann damit arbeiten, checke aber die syntax nicht. Das array soll also wie in einer mehrspaltigen tabelle angeordnet sein.

    sport fussballlogo1 63445
    sport fussballlogo2 63446



    Wie sieht dann sie schreibweise für das array $data aus und wie rufe ich denn die werte auf um sie umzusortieren?

    also nach dem motto $data[1,2,2] wäre theoretisch 63446 oder $data[1,1] wäre dann theoretisch fussballlogo1

    Danke.
    Zuletzt geändert von ; 04.12.2002, 12:04.

  • #2
    PHP-Code:

    /* erster eintrag */
    $data[0][rubrik] = "....";
    $data[0][name] = "....";
    $data[0][code] = "....";

    /* zweiter eintrag */
    $data[1][rubrik] = "....2";
    $data[1][name] = "....2";
    $data[1][code] = "....2";

    /* ausgabe */
    /* erster */
    echo $data[0][rubrik];
    echo 
    $data[0][name];
    echo 
    $data[0][code];

    /* zweiter */
    echo $data[1][rubrik];
    echo 
    $data[1][name];
    echo 
    $data[1][code]; 
    das ganze ist nur schemenhaft zum verständis. natürlich solltest du das array mittels schleife anlegen und auslesen.

    bei dieser form von array musst du auch eine schleife zum anlegen verwenden. [] ist nicht gut, da er sonst für 'name' schon wieder einen neuen index angelegt hat.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      1000 Dank. Ging wie immer super schnell.

      Leider steht das nicht besonders gut beschrieben im online handbuch.

      Kommentar


      • #4
        Eine Frage noch, gibt es die möglichkeit/einen befehl, der die erste reihe als datenbeschreibung liest oder muss ich dass manuell machen?

        Also was ich versuche zu sagen:
        in der ersten reihe des csv files steht

        rubrik,name,code
        sport,fusballlogo1,63445

        Diese sollen ja meine array felder namen werden. Also

        PHP-Code:
        $data[0][rubrik] = "....";
        $data[0][name] = "....";
        $data[0][code] = "...."
        oder kann man in etwa folgendes machen:

        PHP-Code:
        $bezeichner[0]="rubrik";
        $bezeichner[1]="name";
        $bezeichner[2]="code"
        und dann

        PHP-Code:
        $data[0][$bezeichner[0]] = "....";
        $data[0][$bezeichner[1]] = "....";
        $data[0][$bezeichner[2]] = "...."

        Kommentar


        • #5
          Super,

          was für alle ...

          habe gerade ein script geschrieben, dass die erste zeile einer csv datei auf ihre datenstruktur analysiert und dann nach dem schema

          //$data[x][rubrik] = "....2";
          //$data[x][name] = "....2";
          //$data[x][code] = "....2";
          //$data[x][...] = "....2";

          als gesammtes array abblildet. Dies entspricht der vorstellung nach der db_result.

          Vielleicht kann das ja jemand gebrauchen.

          PHP-Code:
          <?

          // opens the file at row 1
          $row = 1;
          $fp = fopen ($MOD_src_path.$MOD_src,"r");

          // reading data

          $counter = 0;

          while ($srccsv = fgetcsv ($fp, 1000, ",")) {

              $num = count ($srccsv);
              
              //generating rubrik for e.g. $data[1][rubrik] by reading the first line
              if ($counter == 0 ){
                      for ($c=0; $c < $num; $c++) {
                      $format[$c] = $srccsv[$c];
                      echo $format[$c];
                      }
              }
              else {
              //generating an array with all data from csv in the structure echo $data[0][rubrik]="sport";
                  for ($c=0; $c < $num-1; $c++) {
                          $data[$counter][$format[$c]] = $srccsv[$c];
                          
                          //TEST 
          echo "<br>".$format[$c].$counter."-->".$data[$counter][$format[$c]];
                  }
              }

          /* This is the structure wich is generated */
          //$data[x][rubrik] = "....0";
          //$data[x][name] = "....1";
          //$data[.][..] = "....2";
          //$data[..][...] = "....3";

              $counter++;
          }
          fclose ($fp);


          ?>

          Kommentar


          • #6
            habs zwar nur überflogen, aber stelle es doch mit kurzer anleitung in die
            CODE SCHNIPPSEL.

            da freuen sich immer viele user ....
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              schon gemacht ...

              Kommentar


              • #8
                Das ist mein Array ...

                /* This is the structure wich is generatet */
                //$data[0][rubrik] = "SPORT";
                //$data[0][name] = "fussball2";
                //$data[0][code] = "63445";

                und weitere einträge nach diesem muster ...

                Jetzt will ich ein array erzeugen, welches nur den inhalt hat, wo
                $data[0][rubrik] gleich "SPORT" ist.

                Dazu verwende ich folgenden code

                function sport ($search) {
                return ($search == "SPORT");
                }

                $filterdata= array_filter($data,"sport");

                Dann will ich mit einer for next schleife $filterdata ausgeben.

                WARUM ZUM TEUFEL GEHT DAS NICHT???

                HILFE

                Kommentar


                • #9
                  mit ner for schleife wirst du probleme bekommen, da nicht mehr alle indizes vorhanden sind.
                  das musst du mit einer while-schleife und each() machen.
                  schaue mal hier nach...
                  http://de.php.net/manual/de/function.array-filter.php
                  da stehen auch beispiele drin.
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    genau das habe ich probiert und es hat nicht geklappt, weil die ganzen arry funktionen in der handbuch schreibweise nur mit eindimensionalen arrays funktioniert.

                    Ich kenne leider die schreibweise für mehrdimensionale nicht.

                    gelöst habe ich es so:

                    PHP-Code:
                    # NEW MODULE View

                    # PART1 Filter a special one
                        
                    // Filter "$search" "$in" of CSV "$data"

                    $search "SPORT";
                    $in "rubrik";
                    $filtered ="";

                    for (
                    $c=1$c count($data); $c++){
                            if(
                    $search == $data[$c][$in]){
                            
                    $filtered[$c-1][$in] = $data[$c][$in]; //extract "$search $in" | $c-1 as first row is CSVstructure
                            
                            //TEST echo "Found ".$filtered[$c-1][$in]."<br>";
                            
                            
                    }
                            
                            
                    //TEST elseif($search != $data[$c][$in]){echo "No item found at ".$c." as data is ".$data[$c][$in]."<br>";}
                    }    

                            
                    //TEST echo "Size ".count($filtered)."<br>"; 
                    aber ich würde eben gerne folgendes tun:
                    PHP-Code:
                    function csvfilter($filter) {
                        return (
                    $filter == "SPORT");
                    }

                    echo 
                    "Ergebnis :\n";
                    $filtered=array_filter($data"csvfilter"); 

                    $data zur erinnerung:
                    /* This is the structure wich is generatet */
                    //$data[0][rubrik] = "SPORT";
                    //$data[0][name] = "fussball2";
                    //$data[0][code] = "63445";

                    $filtered soll dann im selben format wie $data sein, aber nur mit der rubrik=SPORT

                    Kommentar


                    • #11
                      Original geschrieben von faustus
                      PHP-Code:
                      $data[0][$bezeichner[0]] = "....";
                      $data[0][$bezeichner[1]] = "....";
                      $data[0][$bezeichner[2]] = "...."
                      Das geht noch einfacher:
                      PHP-Code:
                      $data[$i] = array(
                        
                      'rubrik' =>"....",
                        
                      'name' => "....",
                        
                      'code' => "...."
                      ); 
                      Und: wenn du das $i weglässt, wird automatisch ein Datensatz an das Array $data angehängt.
                      mein Sport: mein Frühstück: meine Arbeit:

                      Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                      Kommentar


                      • #12
                        danke @titus,

                        mein probelm bezieht sich aber auf

                        mit ner for schleife wirst du probleme bekommen, da nicht mehr alle indizes vorhanden sind.
                        das musst du mit einer while-schleife und each() machen.
                        schaue mal hier nach...
                        http://de.php.net/manual/de/function.array-filter.php
                        da stehen auch beispiele drin.
                        von @Abraxax

                        Ich weiss nicht wie ich die array_functions speziell filter_array() anwenden kann ohne die bezeichner zu verwenden, da rubrik, name, etc.

                        Wenn ich es so mache
                        PHP-Code:
                        function csvfilter($filter) {
                            return (
                        $filter == "SPORT");
                        }

                        echo 
                        "Ergebnis :\n";
                        $filtered=array_filter($data"csvfilter"); 
                        klappt es nicht.

                        Kommentar


                        • #13
                          Die Filter-Funktion bekommt eins der Elemente von $data als Parameter,
                          also eines der assoziativen Arrays; das muss natürlich auch entsprechend behandelt werden:

                          function csvfilter($filter) {
                          return ($filter['rubrik'] == 'SPORT');
                          }
                          mein Sport: mein Frühstück: meine Arbeit:

                          Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                          Kommentar


                          • #14
                            Danke.

                            Dann kann ich meinen ganzen for next code auf 3 zeilen kürzen wenn es funktioniert.

                            Ich probiere das mal später aus.

                            Super!!! Ich war nämlich gestern bis 02.00 morgens und hab probiert und probiert und es ging nicht.

                            Kommentar


                            • #15
                              Ich bin blöd ...

                              es geht nicht ...

                              was ist an meinem code falsch?

                              PHP-Code:
                              $search "SPORT";
                              $in "rubrik";
                              global 
                              $in;
                              $filtered ="";

                              function 
                              csvFilter($filter) {
                              echo 
                              $in;
                              return (
                              $filter[$in] == 'SPORT');
                              }
                              echo 
                              "Ergebnis :\n";
                              $filtered=array_filter($data[$in], 'csvFilter'); 

                              Kommentar

                              Lädt...
                              X