2012-11-17 7 views
6

外部のサーバからテキストファイルに応答を保存したため、接続要求を実行し続ける必要はありません。代わりに、おそらく、再接続のために読まれるまで、私は自分の操作目的のためにテキストファイルを使用することができます。ここでPHP配列をテキストファイルに保存

私はテキストファイルに保存されてきたものである(また、私の接続要求は、この外部のサーバーに制限されています):

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データが戻って配列に変換することができますか?!FYI、php.net manualは別の事実を述べています。var_export()は循環参照を処理できません。そのために解析可能なPHPコードを生成することは不可能に近いでしょう。配列やオブジェクトの完全な表現で何かをしたい場合は、serialize()を使用してください。 – rajukoyilandy

+0

@rajukoyilandy:シリアル化もjson_encodeもできません。円の参照は、オブジェクト構造内の場面ですが、OPにはemがあるため、プレーンな配列ではありません。 'var_export'ファイルは、通常include()dするための簡単なPHPスニペットです。これを慎重に使用する必要がありますが、設定ファイルにとっては非常に重要です。 – 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); 
関連する問題