我只是想快速存储一个从远程API获取的数组,这样我就可以在本地主机上乱搞它。
所以:
此处不需要效率等,这对于实际网站来说只是为了获得一些消毒/格式化方法等等。
是否有像 store_array()
或 restore_arrray()
这样的功能?!
答案 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函数。
要进行速度比较,请参阅最初来自benchmark的Preferred 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)
// 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_contents和eval将其读回。
// 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);