Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem beim einlesen von CSV-Daten

Einklappen

Neue Werbung 2019

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

  • Problem beim einlesen von CSV-Daten

    Hallo Communtiy,

    ich stehe grade voll auf dem Schlauch, vielleicht kennt sich da jemand adhoc mit aus und kann mir helfen?

    Am besten beschreibe ich mal was ich gemacht habe und was es nicht macht. Als erstes wird diese Funktion ausgeführt, die als Rückgabewert ein Array mit den verarbeiteten CSV Daten hat:

    PHP-Code:
    public function csv_object($csv_file$delimiter=';'){
        if(!
    file_exists($csv_file) || !is_readable($csv_file)){
          return 
    FALSE;
        }

        
    $header="";
        
    $rows=file($csv_file);

        foreach(
    $rows as $row){
          
    $values=str_getcsv($row,';','"','\\');
          if(!
    $header){
            
    $header=$values;
          }else{
            
    $this->data_array[]=array_combine($header,$values);
          }
        }
        return 
    $data_array=$this->data_array;
      } 
    .

    Danach wird diese Funktion ausgeführt die die Daten verheinheitlichen soll:

    PHP-Code:
    public function load_products_array(){ //Frage: Wiese geht "id" imd "image_link" nicht als Schlüssel?
        
    $data_array=$this->csv_object($this->csv_file);
        foreach(
    $data_array as $key=>$value){
          
    $this->set_id($value["id"]); // setzt doublequotes
          
    $this->set_title($value["manufacturer"]);
          
    $this->set_description($value["name"]);
          
    $this->set_image_link($value["product_image"]); // setzt Link nicht
          
    $this->set_price($value["price"]);
          
    $products_array[]=array("id"=>$this->get_id(),
                                  
    "title"=>$this->get_title(),
                                  
    "description"=>$this->get_description(),
                                  
    "image_link"=>$this->get_image_link(),
                                  
    "price"=>$this->get_price());
        }
        
    $this->set_products_array($products_array);
        return 
    $this->get_products_array();
      } 
    .

    Das funktioniert auch soweit alles, aber ich hänge an der "id" und dem "product_image". Irgendwie will es die id nicht setzen in das Array und auch den Link nicht den Wert aus dem Ursprungsarray zuweisen.

    Es sieht so aus:

    ... [32] => Array ( [id] => [title] => GOODYEAR [description] => SONAR SX-608 195/60 R14 86 H [image_link] => [price] => 30.25 ) ...
    Soll aber so aussehen:
    ... [32] => Array ( [id] => 132438 [title] => BRIDGESTONE [description] => RIGDON 780 175/65 R13 80 Q [image_link] => http://xxxxx.xxxxx.de/images/tyre/...0-h300-br1.jpg [price] => 25.75 ) ...
    Mit XML kein Problem bisher. Die dazugehörigen Fehlermeldungen:
    Code:
      Notice: Undefined index: id in /srv/dev-disk-by-path-pci-0000-00-0b.0/bib/testcase/inc/csv/CSV.inc.php on line 120  Notice: Undefined index: product_image in /srv/dev-disk-by-path-pci-0000-00-0b.0/bib/testcase/inc/csv/CSV.inc.php on line 123.  
    Warum werden "id" und "product_image" nicht eingelesen? Ist "id" eine PHP Schlüsselwort und hat "product_image" Probleme weil ein Link hinterlegt ist? Kapiers grade nicht? Wer hat damit Erfahrungen oder ein Idee die mir weiterhelfen könnte, bitte?

  • #2
    Was gibt dir denn ein var_dump() auf die Variable in der du den Schlüssel erwartest? Die Fehlermeldung ist ja ziemlich eindeutig und nur ein Symptom, das Problem liegt dann schon beim einlesen. Aber dein Code ist unvollständig und für aussenstehende nicht nachvollziehbar, besser du postest mal ein vollständiges Beispiel.
    [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

    Kommentar


    • #3
      Hallo, hier der komplete Code. Ist aber eine Klasse. Eigentlich sind nur die beiden letzten Funktionen relevant werden aufgerufen, Rest ist nur innerhalb der Klasse nützlich:

      PHP-Code:
      <?php
      class CSV{
        private 
      $data_array;
        private 
      $csv_file;
        private 
      $id;
        private 
      $title;
        private 
      $description;
        private 
      $image_link;
        private 
      $price;
        private 
      $products_array;

        
      //Constructor...
          
      public function __construct(){
          
      $this->csv_file="../../csv/products/db_tyres.csv";
            
      $this->data_array=array();
          
      $this->id="";
          
      $this->title="";
          
      $this->description="";
          
      $this->image_link="";
          
      $this->price=0.00;
          
      $this->products_array=array();
          return 
      true;
          }

        public function 
      set_data_array($data_array){
          
      $this->data_array=$data_array;
          return 
      true;
        }

        public function 
      set_id($id){
          
      $this->id=$id;
          return 
      true;
        }

        public function 
      set_title($title){
          
      $this->title=$title;
          return 
      true;
        }

        public function 
      set_description($description){
          
      $this->description=$description;
          return 
      true;
        }

        public function 
      set_image_link($image_link){
          
      $this->image_link=$image_link;
          return 
      true;
        }

        public function 
      set_price($price){
          
      $this->price=$price;
          return 
      true;
        }

        public function 
      set_products_array($products_array){
          
      $this->products_array=$products_array;
          return 
      true;
        }

        public function 
      get_data_array(){
          return 
      $this->data_array;
        }

        public function 
      get_id(){
          return 
      $this->id;
        }

        public function 
      get_title(){
          return 
      $this->title;
        }

        public function 
      get_description(){
          return 
      $this->description;
        }

        public function 
      get_image_link(){
          return 
      $this->image_link;
        }

        public function 
      get_price(){
          return 
      $this->price;
        }

        public function 
      get_products_array(){
          return 
      $this->products_array;
        }

        public function 
      csv_object($csv_file$delimiter=';'){
          if(!
      file_exists($csv_file) || !is_readable($csv_file)){
            return 
      FALSE;
          }

          
      $header="";
          
      $rows=file($csv_file);

          foreach(
      $rows as $row){
            
      $values=str_getcsv($row,';','"','\\');
            if(!
      $header){
              
      $header=$values;
            }else{
              
      $this->data_array[]=array_combine($header,$values);
            }
          }
          return 
      $data_array=$this->data_array;
        }

        public function 
      load_products_array(){ //Frage: Wiese geht "id" imd "image_link" nicht als Schlüssel?
          
      $data_array=$this->csv_object($this->csv_file);
          foreach(
      $data_array as $key=>$value){
            
      $this->set_id($value["id"]); // setzt doublequotes
            
      $this->set_title($value["manufacturer"]);
            
      $this->set_description($value["name"]);
            
      $this->set_image_link($value["product_image"]); // setzt Link nicht
            
      $this->set_price($value["price"]);
            
      $products_array[]=array("id"=>$this->get_id(),
                                    
      "title"=>$this->get_title(),
                                    
      "description"=>$this->get_description(),
                                    
      "image_link"=>$this->get_image_link(),
                                    
      "price"=>$this->get_price());
          }
          
      $this->set_products_array($products_array);
          return 
      $this->get_products_array();
        }
      }
      ?>

      Kommentar


      • #4
        Und die CSV-Datei?

        Warum ist der Pfad zur CSV-Datei eigentlich im Contructor gardgecoded? Wer macht sowas ekelhaftes?

        Kommentar


        • #5
          Die CSV-Datei sieht so aus(kann ich nicht als Anhang machen):

          "id";"manufacturer";"name";"additional";"price ";"a vailability";"product_image"

          "39676";"TOYO";"KUMHO 857 205/65R16C 107T";;"59.99";"32";"http://media2.tyre24.de/images/tyre/857-R-w300-h300-br1.jpg"

          "196835";"TOYO";"MARSHAL 857 235/65 R16 115R";"DOT 2008";"87.40";"1";"http://media2.tyre24.de/images/tyre/857-R-w300-h300-br1.jpg"

          "251647";"TOYO";"MARSHAL 857 195/75R16C 107R 8PR";"DOT 2011";"51.25";"17";"http://media2.tyre24.de/images/tyre/857-R-w300-h300-br1.jpg"

          "154761";"NEXEN";"ROCKSTON 109 185/70 R13 86 T";;"30.99";"54";"http://media2.tyre24.de/images/tyre/109-R-w300-h300-br1.jpg"

          "145003";"GOODYEAR";"ITP 589MS 25X10.0-11 6 PR TL";;"58.00";"2";"http://media2.tyre24.de/images/tyre/589-R-w300-h300-br1.jpg"

          "10228";"BRIDGESTONE";"RIGDON 780 165/70 R13 79 Q";"RUNDERN. TÜV-GEPRÜFT M+S";"26.70";"45";"http://media2.tyre24.de/images/tyre/780-R-w300-h300-br1.jpg"

          "409716";"TOYO";"CON. 100/90- 10 61 J TL SCOOTY";;"21.72";"41";"http://media2.tyre24.de/images/tyre/790-R-w300-h300-br1.jpg"

          "252503";"MICHELIN";"DUNLOP WIN-4D 225/55 R18 102H XL ";;"193.39";"4";"http://media2.tyre24.de/images/tyre/225-R-w300-h300-br1.jpg"

          "44550";"TOYO";"*MARSHAL 857 215/75R16C 116Q 10P";"AUSLAUF";"69.95";"5";"http://media2.tyre24.de/images/tyre/857-R-w300-h300-br1.jpg"

          "44560";"TOYO";"MARSHAL 857 205/65R16C 107T 8PR";;"51.90";"48";"http://media2.tyre24.de/images/tyre/857-R-w300-h300-br1.jpg"

          "400945";"TOYO";"ALLIANCE 650/85 R 38 385 TL";"173 A8/170 D";"2650.00";"2";"http://media2.tyre24.de/images/tyre/844-R-w300-h300-br1.jpg"

          "1855";"CONTINENTAL";"TOYO 310 135 R15 72 S";;"28.96";"1799";"http://media2.tyre24.de/images/tyre/310-R-w300-h300-br1.jpg"

          "2342";"SEMPERIT";"*YOKOHAMA A 411 225/55 R16 94 V";"OE TOYOTA GS 300";"134.99";"12";"http://media2.tyre24.de/images/tyre/411-R-w300-h300-br1.jpg"

          "154957";"NEXEN";"MINERVA 109 165/60 R14 75 H";;"30.45";"28";"http://media2.tyre24.de/images/tyre/109-R-w300-h300-br1.jpg"

          "400290";"BRIDGESTONE";"CONTI TS 800 175/70 R14 88 T XL";"EXTRA LOAD M+S";"53.25";"137";"http://media2.tyre24.de/images/tyre/800-R-w300-h300-br1.jpg"

          "140633";"FULDA";"DEXTERO DWT1 185/65 R15 88 T";;"34.00";"69";"http://media2.tyre24.de/images/tyre/185-R-w300-h300-br1.jpg"


          500 und paar Einträge gesamt 114kB.

          Wollte den CSV Pfad als default übergeben, ist noch nicht ausformuliert... . Wie würdest du es denn machen? Bzw. wie wirds gemacht/kann es besser gemacht werden? Lasse mich da gerne belehren.

          Kommentar


          • #6
            Das Skript:

            PHP-Code:
            <?php

            //Klassen einbinden...
            require_once("../../inc/csv/CSV.inc.php");

            //Objekte instanziieren...
            $CSV=new CSV();

            $array=$CSV->csv_object("../../csv/products/db_tyres.csv");

            //$array=$CSV->load_products_array();

            echo "<pre>";
            print_r($array);
            echo 
            "</pre>";

            ?>
            Die Ausgabe des Skripts für $data_array:

            Code:
             
             Array (     [0] => Array         (             ["id"] => 39676             [manufacturer] => TOYO             [name] => KUMHO    857    205/65R16C 107T             [additional] =>              [price] => 59.99             [availability] => 32             [product_image ] => http://media2.tyre24.de/images/tyre/857-R-w300-h300-br1.jpg         )      [1] => Array         (             ["id"] => 196835             [manufacturer] => TOYO             [name] => MARSHAL  857    235/65 R16 115R             [additional] => DOT 2008             [price] => 87.40             [availability] => 1             [product_image ] => http://media2.tyre24.de/images/tyre/857-R-w300-h300-br1.jpg         )      [2] => Array         (             ["id"] => 251647             [manufacturer] => TOYO             [name] => MARSHAL  857    195/75R16C 107R 8PR             [additional] => DOT 2011             [price] => 51.25             [availability] => 17             [product_image ] => http://media2.tyre24.de/images/tyre/857-R-w300-h300-br1.jpg

            Kommentar


            • #7
              Das Skript für $products_array:

              PHP-Code:
              <?php

              //Klassen einbinden...
              require_once("../../inc/csv/CSV.inc.php");

              //Objekte instanziieren...
              $CSV=new CSV();

              //$array=$CSV->csv_object("../../csv/products/db_tyres.csv");

              $array=$CSV->load_products_array();

              echo 
              "<pre>";
              print_r($array);
              echo 
              "</pre>";

              ?>
              Die Ausgabe des $product_array:

              Code:
               Array (     [0] => Array         (             [id] =>              [title] => TOYO             [description] => KUMHO    857    205/65R16C 107T             [image_link] =>              [price] => 59.99         )      [1] => Array         (             [id] =>              [title] => TOYO             [description] => MARSHAL  857    235/65 R16 115R             [image_link] =>              [price] => 87.40         )      [2] => Array         (             [id] =>              [title] => TOYO             [description] => MARSHAL  857    195/75R16C 107R 8PR             [image_link] =>              [price] => 51.25         )
              Kann es sein das "id" ein Schlüsselwort in PHP ist und es deswegen zu Problemen kommt?

              Und das der Link nicht geht weil ich den vorher als solchen festlegen muss und er deswegen unterdrückt wird?

              Komisch ist das die CSV-Datei ok ist aber beim einlesen unter id die id zusätzliche doublequotes bekommt?

              Kommentar


              • #8
                Also bei mir funktioniert das Auslesen mit deinem Code. Außer das "price" erst nicht gelesen werden konnte, weil da im Header noch ein zusätzliches Leerzeichen ist am Ende:

                Code:
                "id";"manufacturer";"name";"additional";"price ";"a vailability";"product_image"
                Da kommt dann aber auch eine Notice: Undefined index: price

                Hast du sichergestellt, dass deine CSV Headerzeile korrekt ist und das error_reporting voll aufgedreht ist?
                sorry, shift-taste kaputt

                Kommentar


                • #9
                  Check ich sogleich...

                  Kommentar


                  • #10
                    Zitat von ChookaP Beitrag anzeigen
                    . Wie würdest du es denn machen? Bzw. wie wirds gemacht/kann es besser gemacht werden?
                    File() mag für diese Anwendung ausreichen, macht aber bei einigen speziellen CSV-Files Probleme. Schau dir das SplFileObject an.
                    Habe für mich dieses Objekt erweitert, da ich sehr viel mit CSV zutun habe:
                    PHP-Code:
                    class CsvFileObject extends \SplFileObject 
                    Mit dieser Klasse löse ich auch das Problem der Auswahl bestimmter Spalten und die Vergabe neuer Schlüssel in einem Rutsch.
                    Das folgende Beispiel soll dies andeuten:
                    PHP-Code:
                    $strCSV '"id";"manufacturer";"name";"additional";"price ";"a vailability";"product_image"
                    "39676";"TOYO";"KUMHO 857 205/65R16C 107T";;"59.99";"32";"http://media2.tyre24.de/images/tyre/857-R-w300-h300-br1.jpg"
                    "196835";"TOYO";"MARSHAL 857 235/65 R16 115R";"DOT 2008";"87.40";"1";"http://media2.tyre24.de/images/tyre/857-R-w300-h300-br1.jpg"'
                    ;

                    $csv CsvFileObject::createFromString($strCSV);

                    $selectedCols = array(
                      
                    => "id",
                      
                    => "title",
                      
                    => "img",
                      
                    => "price"
                    );
                    $csv->setSelectedCols($selectedCols);

                    debug::write($csv->toArray()); 
                    Ausgabe:
                    PHP-Code:
                    array (
                      
                    => 
                      array (
                        
                    'id' => "id",
                        
                    'title' => "manufacturer",
                        
                    'img' => "product_image",
                        
                    'price' => "price ",
                      ),
                      
                    => 
                      array (
                        
                    'id' => "39676",
                        
                    'title' => "TOYO",
                        
                    'img' => "http://media2.tyre24.de/images/tyre/857-R-w300-h300-br1.jpg",
                        
                    'price' => "59.99",
                      ),
                      
                    => 
                      array (
                        
                    'id' => "196835",
                        
                    'title' => "TOYO",
                        
                    'img' => "http://media2.tyre24.de/images/tyre/857-R-w300-h300-br1.jpg",
                        
                    'price' => "87.40",
                      ),

                    Mit dem Array $selectedCols werden gleich 3 Dinge erschlagen:
                    1. Die numerischen Schlüssel 0,1,.. legen fest, welche Spalten ausgewählt werden.
                    2. Die Reihenfolge ist auch die neue Reihenfolge im Ausgabearray
                    3. Der Wert so vorhanden ist der neue Schlüssel im Resultat.
                    Die Umsetzung in der Klasse ist bezüglich dieser Problemstellung unkritisch. Mit foreach wird über das Objekt gegangen und mit Hilfe der Zuordnungen in selectedCols ein neues Array erstellt.

                    Kommentar


                    • #11
                      Danke super Beitrag, so geht das, ok.

                      Zitat von Meister1900 Beitrag anzeigen
                      Also bei mir funktioniert das Auslesen mit deinem Code. Außer das "price" erst nicht gelesen werden konnte, weil da im Header noch ein zusätzliches Leerzeichen ist am Ende:



                      Da kommt dann aber auch eine Notice: Undefined index: price

                      Hast du sichergestellt, dass deine CSV Headerzeile korrekt ist und das error_reporting voll aufgedreht ist?
                      Also da hat sich wohl bei availability ein whitespace eingeschlichen. Die Originaldaten sind ohne. Auch so ne Sache vorher noch trim($args) ausführen um sicher zu gehen.

                      Das mit dem error reporting hab ich gecheckt: Habe die php.ini ausfindig gemacht und ein Testskript erstellt. Keine zusätzlichen Fehler. Aber guter Hinweis für die Zukunft, danke.

                      Komisch das es bei dir funktioniert...? Werde der Sache noch auf den Grund gehen müssen.

                      Zwischenzeitlich aber definitiv das SplFileObject sogleich in die CSV Klasse zu integrieren versuchen...

                      Kommentar


                      • #12
                        Zitat von ChookaP Beitrag anzeigen
                        Also da hat sich wohl bei availability ein whitespace eingeschlichen. Die Originaldaten sind ohne. Auch so ne Sache vorher noch trim($args) ausführen um sicher zu gehen.
                        Ja, da auch, aber ich meinte hinter price.

                        "id";"manufacturer";"name";"additional";"price ";"a vailability";"product_image"
                        Das hatte erst dafür gesorgt, dass die Spalte überall null ist. Eigentlich müsstest du auch entsprechende PHP Notices bekommen. Setze das mal ganz am Anfang:

                        PHP-Code:
                        error_reporting(-1); 
                        sorry, shift-taste kaputt

                        Kommentar


                        • #13
                          File() mag für diese Anwendung ausreichen, macht aber bei einigen speziellen CSV-Files Probleme. Schau dir das SplFileObject an.
                          Habe für mich dieses Objekt erweitert, da ich sehr viel mit CSV zutun habe:
                          Ok, ich glaube ich brauche noch zusätzliche Infos zu
                          Code:
                           class CsvFileObject extends \SplFileObject  
                          Was schreibe ich in
                          Code:
                           parent::__construct()
                          bzw. die Methoden
                          Code:
                          $csv=CSV::createFromString($csv_file);
                          und
                          Code:
                          $csv->setSelectedCols($data_arrray);
                          scheinen es nicht als PHP Schlüsselfunktion zu geben?

                          Asche über mein Haupt... . Da ich jetzt erstmal alles aus der CSV File in ein Objekt und dann die Daten mit load_products_array() normalisieren, da ich auch noch ein Klasse XML habe und weitere Formate eventuell hinzufügen möchte, wie gesagt noch nicht ausformuliert. Die Klasse sieht jetzt so aus:
                          Code:
                          <?php
                          
                          class CSV extends \SplFileObject{
                            private $data_array;
                            private $csv_file;
                            private $id;
                            private $title;
                            private $description;
                            private $image_link;
                            private $price;
                            private $products_array;
                          
                            //Constructor...
                              public function __construct(){
                              parent::__construct($this->csv_file="../../csv/products/db_tyres.csv");
                              $this->data_array=array();
                              $this->id="";
                              $this->title="";
                              $this->description="";
                              $this->image_link="";
                              $this->price=0.00;
                              $this->products_array=array();
                              return true;
                              }
                          
                            public function set_data_array($data_array){
                              $this->data_array=$data_array;
                              return true;
                            }
                          
                            public function set_id($id){
                              $this->id=$id;
                              return true;
                            }
                          
                            public function set_title($title){
                              $this->title=$title;
                              return true;
                            }
                          
                            public function set_description($description){
                              $this->description=$description;
                              return true;
                            }
                          
                            public function set_image_link($image_link){
                              $this->image_link=$image_link;
                              return true;
                            }
                          
                            public function set_price($price){
                              $this->price=$price;
                              return true;
                            }
                          
                            public function set_products_array($products_array){
                              $this->products_array=$products_array;
                              return true;
                            }
                          
                            public function get_data_array(){
                              return $this->data_array;
                            }
                          
                            public function get_id(){
                              return $this->id;
                            }
                          
                            public function get_title(){
                              return $this->title;
                            }
                          
                            public function get_description(){
                              return $this->description;
                            }
                          
                            public function get_image_link(){
                              return $this->image_link;
                            }
                          
                            public function get_price(){
                              return $this->price;
                            }
                          
                            public function get_products_array(){
                              return $this->products_array;
                            }
                          
                            public function csv_object($csv_file, $delimiter=';'){
                              if(!file_exists($csv_file) || !is_readable($csv_file)){
                                return FALSE;
                              }
                          
                              $csv=CSV::createFromString($csv_file);
                          
                              $data_array=array(
                                0 => "id",
                                1 => "manufacturer",
                                2 => "name",
                                3 => "additional",
                                4 => "price",
                                5 => "availability",
                                6 => "product_image"
                              );
                              $csv->setSelectedCols($data_arrray);
                          
                              debug::write($csv->toArray());
                              return $data_array=$this->data_array;
                            }
                          
                            public function load_products_array(){ //Frage: Wiese geht "id" imd "image_link" nicht als Schlüssel?
                              $data_array=$this->csv_object($this->csv_file);
                              foreach($data_array as $key=>$value){
                                //$this->set_id($value["id"]); // setzt doublequotes
                                $this->set_title($value["manufacturer"]);
                                $this->set_description($value["name"]);
                                //$this->set_image_link($value["product_image"]); // setzt Link nicht
                                $this->set_price($value["price"]);
                                $products_array[]=array("id"=>$this->get_id(),
                                                        "title"=>$this->get_title(),
                                                        "description"=>$this->get_description(),
                                                        "image_link"=>$this->get_image_link(),
                                                        "price"=>$this->get_price());
                              }
                              $this->set_products_array($products_array);
                              return $this->get_products_array();
                            }
                          }
                          ?>
                          so ungefähr? Bzw. wie integriere ich
                          Code:
                          \SplFileObject
                          in meine Klasse richtig?


                          OffTopic: Sachen wie: Funktionzugriff mit zwei Doppelpunkten ( {Funktion}::{Funktion2} ) oder extends mit \{Klassenname} oder Arrayzuweisungen mit $variable=&$variable2 erschliessen sich mir noch nicht so auf den ersten Blick.

                          Kommentar


                          • #14
                            Zitat von Meister1900 Beitrag anzeigen

                            Ja, da auch, aber ich meinte hinter price.



                            Das hatte erst dafür gesorgt, dass die Spalte überall null ist. Eigentlich müsstest du auch entsprechende PHP Notices bekommen. Setze das mal ganz am Anfang:

                            PHP-Code:
                            error_reporting(-1); 
                            Mein Skript:

                            Code:
                            <?php
                            error_reporting(-1);
                            ini_set("display_errors", 1);
                            include("csv_test.php");
                            ?>
                            Ausgabe: wie gehabt ohne Fehler bei Nutzung der alten Klasse am Threadanfang aber eben ohne die Werte für ID und image_link...

                            Vorher war mein Error Skript so:

                            Code:
                            <?php
                            // E_NOTICE ist sinnvoll um uninitialisierte oder
                            // falsch geschriebene Variablen zu entdecken
                            error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
                            ini_set("display_errors", 1);
                            include("csv_test.php");
                            ?>
                            Keine Auswirkung..

                            Kommentar


                            • #15
                              Also ich hab jetzt mal mit league/csv einem kleinen CSV-Tool mit folgendem Code:

                              Code:
                              <?php
                              
                              use League\Csv\Reader;
                              use League\Csv\Writer;
                              use League\Csv\Statement;
                              
                              require '../../php/test/csv-9.1.4/autoload.php';
                              
                              class CSV_TEST2{
                              
                                private $data_array;
                                private $csv_file;
                                private $id;
                                private $title;
                                private $description;
                                private $image_link;
                                private $price;
                                private $products_array;
                              
                                //Constructor...
                                  public function __construct(){
                                  //parent::__construct($this->csv_file="../../csv/products/db_tyres.csv");
                                  $this->csv_file;    
                                  $this->data_array=array();
                                  $this->id="";
                                  $this->title="";
                                  $this->description="";
                                  $this->image_link="";
                                  $this->price=0.00;
                                  $this->products_array=array();
                                  return true;
                                  }
                              
                                public function set_data_array($data_array){
                                  $this->data_array=$data_array;
                                  return true;
                                }
                              
                                public function set_id($id){
                                  $this->id=$id;
                                  return true;
                                }
                              
                                public function set_title($title){
                                  $this->title=$title;
                                  return true;
                                }
                              
                                public function set_description($description){
                                  $this->description=$description;
                                  return true;
                                }
                              
                                public function set_image_link($image_link){
                                  $this->image_link=$image_link;
                                  return true;
                                }
                              
                                public function set_price($price){
                                  $this->price=$price;
                                  return true;
                                }
                              
                                public function set_products_array($products_array){
                                  $this->products_array=$products_array;
                                  return true;
                                }
                              
                                public function get_data_array(){
                                  return $this->data_array;
                                }
                              
                                public function get_id(){
                                  return $this->id;
                                }
                              
                                public function get_title(){
                                  return $this->title;
                                }
                              
                                public function get_description(){
                                  return $this->description;
                                }
                              
                                public function get_image_link(){
                                  return $this->image_link;
                                }
                              
                                public function get_price(){
                                  return $this->price;
                                }
                              
                                public function get_products_array(){
                                  return $this->products_array;
                                }
                              
                                public function csv_object($csv_file, $delimiter=';'){
                                  if(!file_exists($csv_file) || !is_readable($csv_file)){
                                    return FALSE;
                                  }
                              
                                  $csv=Reader::createFromPath('../../csv/products/db_tyres.csv', 'r');
                                  $csv->setHeaderOffset(0); //set the CSV header offset
                              
                                  //get 1000 records starting from the 11th row
                                  $stmt = (new Statement())
                                      ->offset(0)
                                      ->limit(999)
                                  ;
                              
                                  $records = $stmt->process($csv);
                              
                                  foreach ($records as $key=>$value) {
                                    echo "<pre>";
                                    print_r($value);
                                    echo "</pre>";
                              
                                  }
                                  //return $data_array=$this->data_array;
                                }
                              
                                public function load_products_array(){ //Frage: Wiese geht "id" imd "image_link" nicht als Schlüssel?
                                  $data_array=$this->csv_object($this->csv_file);
                                  foreach($data_array as $key=>$value){
                                    //$this->set_id($value["id"]); // setzt doublequotes
                                    $this->set_title($value["manufacturer"]);
                                    $this->set_description($value["name"]);
                                    //$this->set_image_link($value["product_image"]); // setzt Link nicht
                                    $this->set_price($value["price"]);
                                    $products_array[]=array("id"=>$this->get_id(),
                                                            "title"=>$this->get_title(),
                                                            "description"=>$this->get_description(),
                                                            "image_link"=>$this->get_image_link(),
                                                            "price"=>$this->get_price());
                                  }
                                  $this->set_products_array($products_array);
                                  return $this->get_products_array();
                                }
                              }
                              ?>
                              Folgende Ausgabe bekommen:

                              Code:
                               
                               Array (     [id";"manufacturer";"name";"additional";"price";"availability";"product_image] => 39676;"TOYO";"KUMHO    857    205/65R16C 107T";;"59.99";"32";"http://media2.tyre24.de/images/tyre/857-R-w300-h300-br1.jpg" )   
                               Array (     [id";"manufacturer";"name";"additional";"price";"availability";"product_image] => 196835;"TOYO";"MARSHAL  857    235/65 R16 115R";"DOT 2008";"87.40";"1";"http://media2.tyre24.de/images/tyre/857-R-w300-h300-br1.jpg" )   
                               Array (     [id";"manufacturer";"name";"additional";"price";"availability";"product_image] => 251647;"TOYO";"MARSHAL  857    195/75R16C 107R 8PR";"DOT 2011";"51.25";"17";"http://media2.tyre24.de/images/tyre/857-R-w300-h300-br1.jpg" )
                              Und das kann ich jetzt wie entstückeln?

                              @jspit: Hast du für mich auch eine Source, die hier ist wieder etwas anders zu handhaben, deine sieht besser aus...Achso: Bitte.
                              @Meister1900: ich übergehe jetzt mal das Troubleshooting meiner Klasse und versuche hier die Lösung von jspit so zum laufen zu bringen das ich hier mit meinem kleinen Case weitermachen kann, würde mich aber melden wenn ich herausgefunden habe wo das Problem war.

                              Kommentar

                              Lädt...
                              X