# Array in txt schreiben



## stikmata (27. April 2012)

Hallo ich versuche ein Array in eine Textdatei zu schreiben in dem ich 


```
<?php
        $produkte[0][0]= "Anrede";
	$produkte[0][1]= "Name";
	$produkte[0][2]= "Vorname";

        $produkte[1][0]= $_SESSION['anrede'];
	$produkte[1][1]= $_SESSION['name'];
	$produkte[1][2]= $_SESSION['vorname'];

        $fp = fopen('kunden.txt', 'w');

	foreach($produkte as $fields) {
		fputs($fp, $fields.';');
	}
	fclose($fp);
```


schreibe.

Aber wenn ich dann die datei anschaue steht nur.

Array;Array;

Drin.

Was muss ich machen damit der geasmt inhalt darin steht?


----------



## Bratkartoffel (27. April 2012)

Hi,

mit dem foreach läufst du alle Elemente aus $produkte durch. Diese sind allerdings auch wieder Arrays. Somit musst diese auch wieder durchlaufen, dann bist du bei den Feldern herunten.

Kannst ja mal testweise folgendes in deine Textdatei schreiben lassen:

```
foreach($produkte as $fields) {
        fputs($fp, var_export($fields, true).'\n\n============\n\n');
    }
```

Grüße,
BK


----------



## Maniac (27. April 2012)

Du hast ein Mehrdimensionales Array, also musst du auch die anderen Ebenen durchgehen.

$produkte[0] // -> 1. Ebene
$produkte[0][0] // 2. Ebene


----------



## Alice (27. April 2012)

Hallo. 

Vielleicht irre ich mich ja auch.

Aber ich schreibe Arrays so in eine TXT-Datei:

```
$array2txt = implode("\n", $array)."\n";
```


----------



## Yaslaw (27. April 2012)

Tja, Alice. In diesem Fall irrst du dich. Der Grund dafür haben deine Vorposter bereits geliefert.


----------



## Alice (27. April 2012)

Ich würde den ganzen Code etwas umbauen und es mit einem Eindimensionalen Array machen.

Wenn es jetzt nur um Kundeninformationen geht, reicht das ja auch vollkommen aus.

*Edit:*

Absolut ungetestet.  (Soll nur als "Ansatz" oder "Idee" dienen)


```
$produkte[] = 'Anrede: '.$_SESSION['anrede'];
   $produkte[] = 'Name: '.$_SESSION['name'];
   $produkte[] = 'Vorname: '.$_SESSION['vorname'];

   $fp = fopen('kunden.txt', 'w');
         fwrite($fp, implode ("\n", $produkte))."\n";
         fclose($fp);
```


----------



## stikmata (27. April 2012)

Ok ich habe das nun hinbekommen  habe nun aber das problem das ich die datei in einem programm einlesen möchte und dieses nur ANSI Codierte dateien unterstützt.

meine txt datei ist auf dem server eine ANSI Datei und wenn sie per mail versand wird ist es dann eine UTF-8 Codierte Datei.
Wie kann ich die umcodieren also automatisch


----------



## Alice (27. April 2012)

Wie haste es denn hinbekommen?

Zeig es uns doch bitte, damit wir evtl. auch was davon haben.


----------



## stikmata (27. April 2012)

```
$fp = fopen('kunden.txt', 'w');
	
	foreach ($produkte as $fields) {
	$produkte[] = mb_convert_encoding($produkte, 'utf8');
	fputcsv($fp, $fields, ';');
	}
	fclose($fp);
```

mein Problem ist es nun aber wie gesagt warschein lich den bom zu entfernen aber ich das leider gerade noch nicht hin. Habe es mit 


```
function rmBOM($string) { 
    if(substr($string, 0,3) == pack("CCC",0xef,0xbb,0xbf)) { 
        $string=substr($string, 3); 
    } 
    return $string; 
	}
//
$string = file_get_contents('kunden.txt');
	$string = rmBOM($string);
	file_put_contents('kunden.txt', $string);
```
versucht aber ich weis nicht an welcher stelle ich das entfernen des bom´s platzieren muss erst wenn die datei komplett erstellt wurde denke ich  und so habe ich es auch schon versucht.


----------



## saftmeister (27. April 2012)

Wenn du es einfach haben willst, kannst du natürlich auch serialize() benutzen, um aus dem Array einen String zu erstellen, den du einfach in eine Text-Datei pumpst. Beim Einlesen verwendest du dann logischerweise unserialize() um aus dem String wieder ein Array zu machen.

Das Ganze bringt dir allerdings nur was, wenn dich nicht interessiert, wie es in der Text-Datei steht.


----------

