2012-11-17 18 views
6

Ho salvato una risposta da un server esterno a un file di testo, quindi non è necessario continuare a eseguire richieste di connessione. Invece, forse posso usare il file di testo a scopo di manipolazione, fino a quando non sarò di nuovo in grado di riconnetterti. (Anche, le mie richieste di connessione sono limitate a questo server esterno)Array PHP salvato in file di testo

Ecco quello che ho salvato in un file di testo:

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] 
     ) 
) 

In realtà c'è di più nella matrice, ma sono sicuro che 2 stanno bene.

Poiché si tratta di un file di testo, e voglio far finta questo è il server al di fuori reale (mandarmi le stesse informazioni), come faccio a fare una vera e propria gamma di nuovo?

so che ho bisogno di aprire il file prima:

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

Finora $theData è un valore stringa. C'è un modo per riconvertirlo alla matrice in cui è originariamente entrato?

risposta

19

Meglio serializzare e salvare su file, poi di nuovo a unserialize 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

Si potrebbe serialize la matrice prima di scrivere come testo in un file. Quindi puoi leggere i dati indietro dal file unserialize per trasformarli in un array.

3

Non avresti dovuto salvato in formato print_r poi.

utilizzare:

che rende semplice per decodificare il file in un array.

Anche se c'è un print_r decoder. Ma quello dovrebbe essere l'ultima risorsa, solo se non puoi influenzare i dati di input (che puoi!).

+1

Sei sicuro di dati var_export'ed può essere riconvertito in array? !! FYI, il manuale php.net dice un altro fatto: var_export() non gestisce i riferimenti circolari in quanto sarebbe quasi impossibile generare codice PHP analizzabile per quello. Se vuoi fare qualcosa con la rappresentazione completa di un array o di un oggetto, usa serialize(). – rajukoyilandy

+0

@rajukoyilandy: Né è possibile serializzare o json_encode. I riferimenti circolari sono un'occasione in strutture di oggetti, ma non in semplici array come OP. I file 'var_export' sono semplici snippet di php da includere in genere include() d. Si dovrebbe usare questo attentamente, ma è inestimabile per i file di configurazione. – mario

+0

var_export è uguale a print_r o var_damp – Sergey

0

JSON Versione

$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);