如何将数组存储在文件中以便以后使用PHP作为数组进行访问?

时间:2010-04-18 12:46:32

标签: php

我只是想快速存储一个从远程API获取的数组,这样我就可以在本地主机上乱搞它。

所以:

  1. 我目前有一个阵列。
  2. 我希望人们可以使用该数组,而无需从API中获取它。
  3. 此处不需要效率等,这对于实际网站来说只是为了获得一些消毒/格式化方法等等。

    是否有像 store_array() restore_arrray() 这样的功能?!

8 个答案:

答案 0 :(得分:78)

执行此操作的最佳方法是JSON序列化。它是人类可读的,你将获得更好的性能(文件更小,加载/保存更快)。代码非常简单。只有两个功能

示例代码:

$arr1 = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
file_put_contents("array.json",json_encode($arr1));
# array.json => {"a":1,"b":2,"c":3,"d":4,"e":5}
$arr2 = json_decode(file_get_contents('array.json'), true);
$arr1 === $arr2 # => true

您可以使用此示例轻松编写自己的store_array和restore_array函数。

要进行速度比较,请参阅最初来自benchmarkPreferred method to store PHP arrays (json_encode vs serialize)

答案 1 :(得分:32)

如果您不需要转储文件是人类可读的,那么您只需serialize()数组。

存储

file_put_contents('yourfile.bin', serialize($array));

检索:

$array = unserialize(file_get_contents('yourfile.bin'));

答案 2 :(得分:21)

使用serializeunserialize

// storing
$file = '/tmp/out.data';
file_put_contents($file, serialize($mydata)); // $mydata is the response from your remote API

// retreiving
$var = unserialize(file_get_contents($file));

或另一种黑客方式:

var_export()完全符合您的要求,它将采用任何类型的变量,并将其存储在PHP解析器可以回读的表示中。您可以将其与file_put_contents结合使用,将其存储在磁盘上,然后使用file_get_contentseval将其读回。

// storing
$file = '/tmp/out.php';
file_put_contents($file, var_export($var, true));

// retrieving
eval('$myvar = ' . file_get_contents($file) . ';');

答案 3 :(得分:7)

您可以使用serialize将其作为要写入文件的字符串,并使用随附的unserialize将其返回到数组结构。

我建议使用与语言无关的结构,例如JSON。这将允许您使用与PHP不同的语言加载文件,以防以后有可能。 json_encode要存储它,json_decode ($str, true)要将其存回。

答案 4 :(得分:4)

这里没有提到的另一种快速方式:

通过这种方式添加带有<?php开始标记的标头,带有转义\$my_array =和页脚\$结束标记的变量?>的名称。

现在可以像任何其他有效的php脚本一样使用include()

// storing
$file = '/tmp/out.php';
file_put_contents($file, "<?php\n\$my_array = ".var_export($var, true).";\n?>");

// retrieving as included script
include($file);

//testing
print_r($my_array);

out.php看起来像这样

<?php
  $my_array = array (
    'a'=>1,
    'b'=>2,
    'c'=>3,
    'd'=>4,
    'e'=>5
  );
?>

答案 5 :(得分:1)

使用php serialize:

file_put_contents("myFile",serialize($myArray));

答案 6 :(得分:0)

为了提高性能,谈论php的使用,避免对所有内容进行编码和解码,只需将数组保存为:

 file_put_contents('dic.php', "<?php \n".'$dic='.var_export($dic, true).';');

并正常致电

include "dic.php";

答案 7 :(得分:-1)

我制作了一个很小的库(〜2 KB; <100行),您可以执行此操作:varDx

它具有写入,读取,修改,检查和删除数据的功能。 它实现了序列化,因此支持所有数据类型。

这是使用方法:

<?php
require 'varDx.php';
$dx = new \varDx\cDX; //create an object
$dx->def('file.dat'); //define data file

$val1 = "this is a string";
$dx->write('data1', $val1); //writes key to file
echo $dx->read('data1'); //returns key value from file

在您的特定情况下:

$array1 = array(
    "foo" => "bar",
    "bar" => "foo",
);

//writing the array to file
$dx->write('myarray', $array1);

//reading array from file
$array2 = $dx->read('myarray')

//modifying array in file after making changes
$dx->write('myarray', $array2);