Sven Rautenberg: Klasse soll ein 2 dim. Array als Rückgabewert haben

Beitrag lesen

Moin!

Was mache ich denn falsch, ich müßte doch bei dem aufruf (print $CSV_table[0][0]=$class_CSVrw->CSVread("text.csv");) die erste kolonne und erste zeile erhalten

Nein, auf keinen Fall.

  

> print $CSV_table[0][0]=$class_CSVrw->CSVread("text.csv");  

Der Rückgabewert der Methode CSVread ist ein Array. Das weist du der Variablen §CSV_table[0][0] zu und willst es (das komplette Array) dann ausdrucken. Funktioniert nicht. Du kannst nicht mit den Indexangaben [0][0] auf das Arrayunterelement des Methodenergebnisses zugreifen, sondern produzierst hier ein Array mit multiplen Dimensionen, dein gewünschtes Ergebnis [0][0] im Funktionsergebnis steckt jetzt nämlich in $CSV_table[0][0][0][0].

  
$CSV_table=$class_CSVrw->CSVread("text.csv");  
print $CSV_table[0][0];  

So weist du das Ergebnisarray der Variablen $CSV_table zu (ohne irgendwelche Arraydimensionen) und druckst dann dessen Unterelement [0][0].

Deine Klasse ist allerdings auch zu kritisieren!

  

> <?  
> class CSVrw {  
>   
>  function CSVrw() {  
>  }  
>   
>  function CSVread($file_r) {  
>   $this->file_r=$file_r;  

// Warum dieses sinnlose Kopieren? $file_r steht dir innerhalb der gesamten Methode zur Verfügung. Muß der Dateinamen länger gespeichert werden?  
  

>   $this->table=array();  
>   $this->row=0;  
>   $this->handle=fopen($this->file_r,"r");  

// Alle diese "$this->"-Variablen sind unnötig. Warum legst du global Eigenschaften dieser Klasseninstanz an? Das sollten alles lokale Variablen dieser Methode bleiben! Also weg mit $this->handle, ersetzen durch $handle.  
//Auch in den folgenden Aufrufen entsprechend.  
  
//Abgesehen davon sind diese Klasseneigenschaften auch nirgendwo definiert. Gibt das keine Fehlermeldung?  
  

>   while(($this->data=fgetcsv ($this->handle, 1000, ",")) !== FALSE ) {  
>    //anzahl felder pro reihe  
>    $this->cols=count($this->data);  
>    //reihe in einem 2 dimensionalen array speichern  
>    for($this->i=0; $this->i<$this->cols; $this->i++)  {  
>     print$this->table[$this->row][$this->i]=$this->data[$this->i];  
>     print "<br />";  
>     }  
>     print "<br />";  
>     //nächste zeile  
>     $this->row++;  
>    }  
>   //datei schliessen  
>   fclose ($this->handle);  
>   
>   return $this->table;  
>  }  
>   
>  function CSVwrite($file_w,$file_target) {  
>   $this->file_w=$file_w;  
>   $this->file_target=$file_target;  
>  }  
>   
> }  
> ?>  

- Sven Rautenberg

--
My sssignature, my preciousssss!