存储PHP数组的首选方法(json_encode vs序列化)为了缓存的目的,我需要将多维关联数组数据存储在一个平面文件中。我偶尔会发现需要将其转换为JSON,以便在我的Web应用程序中使用,但大部分时间我将直接使用PHP中的数组。在这个文本文件中将数组存储为JSON还是PHP序列化数组会更有效吗?我环顾四周,似乎在PHP(5.3)的最新版本中,json_decode实际上比unserialize.目前,我倾向于将数组存储为JSON,因为我觉得如果有必要的话,它更容易被人读取,它可以在PHP和JavaScript中使用,只需花费很少的努力,而且从我所读到的内容来看,解码速度甚至可能更快(不过,对编码不太确定)。有人知道有什么陷阱吗?有谁有很好的基准来显示这两种方法的性能优势?
3 回答
![?](http://img1.sycdn.imooc.com/533e4c7b00013f3c02400205-100-100.jpg)
心有法竹
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';}
![?](http://img1.sycdn.imooc.com/545868190001d52602200220-100-100.jpg)
慕桂英4014372
TA贡献1871条经验 获得超13个赞
杰森
您正在存储深度嵌套数组: :“如果JSON编码的数据深于127个元素,此函数将返回false。” 您正在存储需要非序列化为正确类的对象 您正在与不支持json_decode的旧PHP版本交互
![?](http://img1.sycdn.imooc.com/54586431000103bb02200220-100-100.jpg)
Cats萌萌
TA贡献1805条经验 获得超9个赞
- 3 回答
- 0 关注
- 818 浏览
添加回答
举报
0/150
提交
取消