存储PHP数组的首选方法(json_encode vs序列化)为了缓存的目的,我需要将多维关联数组数据存储在一个平面文件中。我偶尔会发现需要将其转换为JSON,以便在我的Web应用程序中使用,但大部分时间我将直接使用PHP中的数组。在这个文本文件中将数组存储为JSON还是PHP序列化数组会更有效吗?我环顾四周,似乎在PHP(5.3)的最新版本中,json_decode实际上比unserialize.目前,我倾向于将数组存储为JSON,因为我觉得如果有必要的话,它更容易被人读取,它可以在PHP和JavaScript中使用,只需花费很少的努力,而且从我所读到的内容来看,解码速度甚至可能更快(不过,对编码不太确定)。有人知道有什么陷阱吗?有谁有很好的基准来显示这两种方法的性能优势?
3 回答
心有法竹
TA贡献1866条经验 获得超5个赞
不像 serialize()您需要添加额外的参数以保持UTF-8字符不受影响: json_encode($array, JSON_UNESCAPED_UNICODE)(否则,它会将UTF-8字符转换为Unicode转义序列)。 JSON将没有对象的原始类的内存(它们总是被还原为stdClass的实例)。 你不能利用 __sleep()和 __wakeup()用JSON 默认情况下,只有公共属性使用JSON序列化。(在 PHP>=5.4你可以实现 若要更改此行为,请执行以下操作。 JSON更便携
<?php
ini_set('display_errors', 1);error_reporting(E_ALL);// Make a big, honkin test array// You may need to adjust this depth to avoid memory limit errors$testArray = fillArray(0, 5);// Time json encoding$start = microtime(true);json_encode($testArray);$jsonTime = microtime(true) - $start;echo "JSON encoded in $jsonTime seconds\n";// Time serialization$start = microtime(true);serialize($testArray);$serializeTime = microtime(true) - $start;echo "PHP serialized in $serializeTime seconds\n";// Compare themif ($jsonTime < $serializeTime) {
printf("json_encode() was roughly %01.2f%% faster than serialize()\n", ($serializeTime / $jsonTime - 1) * 100);}else if ($serializeTime < $jsonTime ) {
printf("serialize() was roughly %01.2f%% faster than json_encode()\n", ($jsonTime / $serializeTime - 1) * 100);} else {
echo "Impossible!\n";}function fillArray( $depth, $max ) {
static $seed;
if (is_null($seed)) {
$seed = array('a', 2, 'c', 4, 'e', 6, 'g', 8, 'i', 10);
}
if ($depth < $max) {
$node = array();
foreach ($seed as $key) {
$node[$key] = fillArray($depth + 1, $max);
}
return $node;
}
return 'empty';}
慕桂英4014372
TA贡献1871条经验 获得超13个赞
杰森
您正在存储深度嵌套数组: :“如果JSON编码的数据深于127个元素,此函数将返回false。” 您正在存储需要非序列化为正确类的对象 您正在与不支持json_decode的旧PHP版本交互
Cats萌萌
TA贡献1805条经验 获得超9个赞
- 3 回答
- 0 关注
- 894 浏览
添加回答
举报
0/150
提交
取消
