2012-11-17 66 views
6

我已經將來自外部服務器的響應保存到文本文件,所以我不需要保持運行連接請求。相反,也許我可以將文本文件用於我的操作目的,直到我再次讀取重新連接。 (另外,我的連接請求被侷限於此之外服務器)PHP Array保存到文本文件

以下是我已經保存到文本文件:

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

實際上,有更多的陣列,但我確定2是好的。由於這是一個文本文件,我想假裝這是實際的外部服務器(向我發送相同的信息),我怎麼才能使它成爲真正的數組呢?

我知道我需要先打開文件:

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

到目前爲止$theData是一個字符串值。有沒有辦法將它轉換回原來的陣列?

回答

19

更好的序列化並保存到文件,然後反序列化回數組。

// 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

你可以serialize這個數組,然後將它作爲文本寫入文件。然後,您可以讀取文件unserialize中的數據將其重新轉換爲數組。

3

然後您不應該將它保存在print_r格式中。

二者必選其一:

這使得它簡單到文件解碼成一個陣列。

雖然有print_r decoder。但是,只有當你不能影響輸入數據(你可以!)時,這應該是最後的手段。

+1

你肯定var_export'ed數據可以轉換回陣?!僅供參考,php.net手冊說另一個事實:var_export()不處理循環引用,因爲它幾乎不可能爲此生成可分析的PHP代碼。如果你想用數組或對象的完整表示來做一些事情,可以使用serialize()。 – rajukoyilandy

+0

@rajukoyilandy:無論是可以序列化或json_encode。循環引用是對象結構中的一個場合,但不是OP中的普通數組。 'var_export'文件是簡單的php片段,通常會包含()d。人們應該小心使用它,但它對於配置文件非常重要。 – mario

+0

var_export與print_r或var_damp相同 – Sergey

0

JSON版本

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