2012-11-17 8 views
6

Ich habe eine Antwort von einem externen Server auf eine Textdatei gespeichert, so dass ich keine Verbindungsanfragen ausführen muss. Stattdessen kann ich vielleicht die Textdatei für meine Manipulationszwecke verwenden, bis ich gelesen werde, um sie erneut zu verbinden. (Auch, meine Verbindungsanfragen auf diese externen Server beschränkt)PHP-Array in Textdatei gespeichert

Hier ist, was ich in einer Textdatei gespeichert haben:

records.txt

Array 
(
    [0] => stdClass Object 
     (
      [id] => 552 
      [date_created] => 2012-02-23 10:30:56 
      [date_modified] => 2012-03-09 18:55:26 
      [date_deleted] => 2012-03-09 18:55:26 
      [first_name] => Test 
      [middle_name] => 
      [last_name] => Test 
      [home_phone] => (123) 123-1234 
      [email] => [email protected] 
     ) 
    [1] => stdClass Object 
     (
      [id] => 553 
      [date_created] => 2012-02-23 10:30:56 
      [date_modified] => 2012-03-09 18:55:26 
      [date_deleted] => 2012-03-09 18:55:26 
      [first_name] => Test 
      [middle_name] => 
      [last_name] => Test 
      [home_phone] => (325) 558-1234 
      [email] => [email protected] 
     ) 
) 

Es ist eigentlich mehr im Array, aber ich bin sicher, 2 sind in Ordnung.

Da dies eine Textdatei ist, und ich vortäuschen möchte, dass dies der eigentliche externe Server ist (mir die gleichen Informationen sendend), wie mache ich es wieder zu einem echten Array?

Ich weiß, ich muss zuerst die Datei öffnen:

<?php 
$fp = fopen('records.txt', "r"); // open the file 
$theData = fread($fh, filesize('records.txt')); 
fclose($fh); 
echo $theData; 
?> 

Bisher $theData ist ein String-Wert. Gibt es eine Möglichkeit, es zurück in das Array zu konvertieren, in das es ursprünglich kam?

Antwort

19

Besser serialisieren und speichern in Datei, dann unserialisieren zurück zum Array.

// serialize your input array (say $array) 
$serializedData = serialize($array); 

// save serialized data in a text file 
file_put_contents('your_file_name.txt', $serializedData); 

// at a later point, you can convert it back to array like: 
$recoveredData = file_get_contents('your_file_name.txt'); 

// unserializing to get actual array 
$recoveredArray = unserialize($recoveredData); 

// you can print your array like 
print_r($recoveredArray); 
3

Sie könnten serialize das Array vor dem Schreiben als Text in eine Datei. Dann können Sie die Daten wieder aus der Datei unserialize wird es in ein Array zurückdrehen.

3

Sie sollten es nicht im Format print_r dann gespeichert haben.

Verwenden Sie entweder:

Das macht es einfach, die Datei wieder in ein Array zu dekodieren.

Obwohl es eine print_r decoder gibt. Aber das sollte der letzte Ausweg sein, nur wenn Sie die Eingabedaten nicht beeinflussen können (was Sie können!).

+1

Sind Sie sicher, können var_export'ed Daten zurück in Array umgewandelt werden? !! FYI, php.net Handbuch sagt eine andere Tatsache: var_export() behandelt keine zirkulären Referenzen, da es fast unmöglich wäre, dafür einen parsierbaren PHP-Code zu generieren. Wenn Sie etwas mit der vollständigen Darstellung eines Arrays oder Objekts tun möchten, verwenden Sie serialize(). – rajukoyilandy

+0

@rajukoilandy: Weder kann serialisieren oder json_encode. Zirkuläre Verweise sind eine Gelegenheit in Objektstrukturen, aber nicht in einfachen Arrays, wie OP sie hat. 'var_export' Dateien sind einfache PHP-Snippets, die normalerweise wieder include() d sind. Man sollte das vorsichtig verwenden, aber es ist für Konfigurationsdateien von unschätzbarem Wert. – mario

+0

var_export ist dasselbe wie print_r oder var_damp – Sergey

0

JSON Version

$json_data = json_encode($the_array); 
file_put_contents("records.txt", $json_data); 

// Recovering 
$the_data = file_get_contents("records.txt"); 
$the_array = json_decode($the_data);