場景 :
cookie無法儲存復合形式的資料,所以需要序列化乙個多維陣列存入cookie,但是由於php版本太低(5.2),不支援json_encode
解決:1,serialize和unserialize函式 : 只支援一維陣列 ,據說對物件的支援比較好,json_encode是不支援物件的
2,base64_encode和base64_decode,同樣的問題,不支援多維,如果用它的話,base64編碼將增加字串的長度。為了克服這個問題,可以和gzcompress一起使用:
function my_serialize( $obj )
//反序列化
function my_unserialize($txt)
3. var_export 和 eval
$look_books = array($aid => array($cid => array('article_name' => $article->articlename, 'chapter_name' => $chapter->chaptername))) + $look_books;
$look_books = var_export($look_books, true);
setcookie('look_books', $look_books, $cookietime, '/', '.dym.com');
支援多維陣列,但是需要注意單雙引號會有轉義符,導致eval失敗,需要把轉義符去掉
stripcslashes() 即可。
4. wddx_serialize_value 和 wddx deserialize
//序列化陣列
$s = wddx_serialize_value($a);
echo $s;
banana
coconut
echo '
';
//反序列化
$o = wddx_deserialize($s);
print_r($o);
這種方式xml本身的標籤占用字元過多,比較占用記憶體。
解決時自己使用了第三種。
PHP 幾種 序列化 反序列化的方法
序列化是將變數轉換為可儲存或傳輸的字串的過程 反序列化就是在適當的時候把這個字串再轉化成原來的變數使用。這兩個過程結合起來,可以輕鬆地儲存和傳輸資料,使程式更具維護性。1.serialize和unserialize函式 a array a b banana c coconut 序列化陣列 s ser...
PHP序列化 序列化
將物件序列號 當需要將物件長久儲存時或用於網路傳輸等.將物件序列號成字串儲存 class demo 魔術方式,當物件序列號時自動呼叫,此時會序列號陣列中的屬性.如果沒有該方法,則序列號所有屬性 function sleep 當物件返序列化時自動呼叫,此時會初始化返序列化後物件中該方法中的屬性 fun...
PHP的序列化和反序列化
php使用serialize 這個過程被稱為序列化,使用unserialize 這個過程被稱作反序列化。用於序列化物件或陣列,並返回乙個字串。序列化會儲存物件中的所有變數,不會儲存物件的方法,只會儲存類的名字。php序列化就是將記憶體的變數資料 儲存 到檔案的持久資料的過程例子 class user...