存儲PHP數(shù)組的首選方法(json_encode vs序列化)為了緩存的目的,我需要將多維關(guān)聯(lián)數(shù)組數(shù)據(jù)存儲在一個平面文件中。我偶爾會發(fā)現(xiàn)需要將其轉(zhuǎn)換為JSON,以便在我的Web應(yīng)用程序中使用,但大部分時間我將直接使用PHP中的數(shù)組。在這個文本文件中將數(shù)組存儲為JSON還是PHP序列化數(shù)組會更有效嗎?我環(huán)顧四周,似乎在PHP(5.3)的最新版本中,json_decode實際上比unserialize.目前,我傾向于將數(shù)組存儲為JSON,因為我覺得如果有必要的話,它更容易被人讀取,它可以在PHP和JavaScript中使用,只需花費很少的努力,而且從我所讀到的內(nèi)容來看,解碼速度甚至可能更快(不過,對編碼不太確定)。有人知道有什么陷阱嗎?有誰有很好的基準(zhǔn)來顯示這兩種方法的性能優(yōu)勢?
3 回答

心有法竹
TA貢獻(xiàn)1866條經(jīng)驗 獲得超5個贊
不像 serialize()
您需要添加額外的參數(shù)以保持UTF-8字符不受影響: json_encode($array, JSON_UNESCAPED_UNICODE)
(否則,它會將UTF-8字符轉(zhuǎn)換為Unicode轉(zhuǎn)義序列)。 JSON將沒有對象的原始類的內(nèi)存(它們總是被還原為stdClass的實例)。 你不能利用 __sleep()
和 __wakeup()
用JSON 默認(rèn)情況下,只有公共屬性使用JSON序列化。(在 PHP>=5.4
你可以實現(xiàn) 若要更改此行為,請執(zhí)行以下操作。 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貢獻(xiàn)1871條經(jīng)驗 獲得超13個贊
杰森
您正在存儲深度嵌套數(shù)組: :“如果JSON編碼的數(shù)據(jù)深于127個元素,此函數(shù)將返回false?!?/trans> 您正在存儲需要非序列化為正確類的對象 您正在與不支持json_decode的舊PHP版本交互

Cats萌萌
TA貢獻(xiàn)1805條經(jīng)驗 獲得超9個贊
- 3 回答
- 0 關(guān)注
- 839 瀏覽
添加回答
舉報
0/150
提交
取消