2014年5月1日 星期四

PHP - serialize()

來拆解一下 serialize 之後的內容。

假設陣列如下:

<?php
$array = array(
    0 => array(
        'name' => 'Peter',
        'age'  => 26
    ),
    1 => array(
        'name' => 'John',
        'age'  => '23'
    )   
);
echo "<pre>".print_r(serialize($array),1)."</pre>";
?>


serialize()之後,得到字串:
a:2:{i:0;a:2:{s:4:"name";s:5:"Peter";s:3:"age";i:26;}i:1;a:2:{s:4:"name";s:4:"John";s:3:"age";s:2:"23";}}

解析:

a:2:{i:0;a:2:{s:4:"name";s:5:"Peter";s:3:"age";i:26;}i:1;a:2:{s:4:"name";s:4:"John";s:3:"age";s:2:"23";}}
a 代表陣列 array, 2 代表有 2 個元素。

a:2:{i:0;a:2:{s:4:"name";s:5:"Peter";s:3:"age";i:26;}i:1;a:2:{s:4:"name";s:4:"John";s:3:"age";s:2:"23";}}
i 代表索引 index,除了用來表示陣列的鍵值,數字也是用i表示。這裡的 0 表示陣列鍵值,第 1 個元素

a:2:{i:0;a:2:{s:4:"name";s:5:"Peter";s:3:"age";i:26;}i:1;a:2:{s:4:"name";s:4:"John";s:3:"age";s:2:"23";}}
s 代表字串,4 表示長度( name 是 4 個字)。

a:2:{i:0;a:2:{s:4:"name";s:5:"Peter";s:3:"age";i:26;}i:1;a:2:{s:4:"name";s:4:"John";s:3:"age";s:2:"23";}}
i 代表數字。但這跟陣列的鍵值無關,大概數字都用 i 表示。26 是數字,年齡 26。

a:2:{i:0;a:2:{s:4:"name";s:5:"Peter";s:3:"age";i:26;}i:1;a:2:{s:4:"name";s:4:"John";s:3:"age";s:2:"23";}}
23 在陣列裡面用單引號括起來,所以型值是字串,長度為 2 。

把 serialize()之後得到的字串,重新編排如下:

a:2:{
    i:0;
        a:2:{
            s:4:"name";
            s:5:"Peter";
            s:3:"age";
            i:26;
            }
    i:1;
        a:2:{
            s:4:"name";
            s:4:"John";
            s:3:"age";
            s:2:"23";
            }
    }

沒有留言:

張貼留言