文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PHP 中的序列化函数

2024-02-27 20:56

关注

PHP serialize() 用于将复杂的数据结构转换为特定字符串的格式,以便我们可以在运行的 PHP 脚本之外使用它们。

简单地说,serialize() 用于将数据结构放入 lower common denominator,以便在文本文件、套接字或数据库中使用它们。

本文演示了 serialize()unserialize() 的使用。


在 PHP 中演示对一维数组使用 serialize()unserialize()

PHP serialize() 只接受一个参数,即你要序列化的值,unserialize() 也是如此。参见示例:


<?php
$demo_array = array("jiyik1", "jiyik2", "jiyik3");
//serialize one dimensional array
$serialized_data = serialize($demo_array);
echo $serialized_data."<br>";
//Userialize the serialized array
$Unserialized_data = unserialize($serialized_data);
print_r($Unserialized_data);
echo "<br><br>";

//serialize an assosiative array
$demo_array= array( 'Val1' => 'jiyik1', 'Val2'=> 'jiyik2', 'Val3'=>'jiyik3');
$serialized_data = serialize($demo_array);
echo $serialized_data."<br>";
//Userialize the serialized array
$Unserialized_data = unserialize($serialized_data);
print_r($Unserialized_data);
?>

PHP serialize() 一个简单数组和一个关联数组,然后通过 unserialize() 反转操作。

输出:


a:3:{i:0;s:6:"jiyik1";i:1;s:6:"jiyik2";i:2;s:6:"jiyik3";}
Array
(
    [0] => jiyik1
    [1] => jiyik2
    [2] => jiyik3
)


a:3:{s:4:"Val1";s:6:"jiyik1";s:4:"Val2";s:6:"jiyik2";s:4:"Val3";s:6:"jiyik3";}
Array
(
    [Val1] => jiyik1
    [Val2] => jiyik2
    [Val3] => jiyik3
)

序列化生成一个字符串,其中包含给定数组的所有数据。序列化字符串,数组的 a=size,数组编号的 i=count,数组值的 s=size

输出显示,如果数组不是关联的,serialize 仍将根据关联数组生成输出。


在 PHP 中演示对多维数组使用 Serialize()Unserialize()

对于多维数组,输出将是相似的。


<?php
$multidimentional_array= array(
    array(
        array("jiyik1", 10, 15.5),
        array("jiyik2", 15, 25.5)
       ),
    array(
        array("jiyik1", 15, 25.5),
        array("jiyik2", 20, 30.5)
       ),
    array(
        array("jiyik1", 20, 30.5),
        array("jiyik2", 30, 35.5) 
    )
);
//serialize one dimensional array
$serialized_data = serialize($multidimentional_array);
echo $serialized_data."<br><br><br>";
//Userialize the serialized array
$Unserialized_data = unserialize($serialized_data);
print_r($Unserialized_data);
?>

输出:


a:3:{i:0;a:2:{i:0;a:3:{i:0;s:6:"jiyik1";i:1;i:10;i:2;d:15.5;}i:1;a:3:{i:0;s:6:"jiyik2";i:1;i:15;i:2;d:25.5;}}i:1;a:2:{i:0;a:3:{i:0;s:6:"jiyik1";i:1;i:15;i:2;d:25.5;}i:1;a:3:{i:0;s:6:"jiyik2";i:1;i:20;i:2;d:30.5;}}i:2;a:2:{i:0;a:3:{i:0;s:6:"jiyik1";i:1;i:20;i:2;d:30.5;}i:1;a:3:{i:0;s:6:"jiyik2";i:1;i:30;i:2;d:35.5;}}}


Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => jiyik1
                    [1] => 10
                    [2] => 15.5
                )

            [1] => Array
                (
                    [0] => jiyik2
                    [1] => 15
                    [2] => 25.5
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [0] => jiyik1
                    [1] => 15
                    [2] => 25.5
                )

            [1] => Array
                (
                    [0] => jiyik2
                    [1] => 20
                    [2] => 30.5
                )

        )

    [2] => Array
        (
            [0] => Array
                (
                    [0] => jiyik1
                    [1] => 20
                    [2] => 30.5
                )

            [1] => Array
                (
                    [0] => jiyik2
                    [1] => 30
                    [2] => 35.5
                )

        )

)

PHP 中 Serialize()json_encode() 的区别

json_encode() 是 PHP 中另一个将数组或对象转换为字符串的内置方法,它使用 JSON 来执行操作,类似地,对于 unserialize()json_decode() 可以用过的。

serialize()json_encode() 之间有一些区别。

让我们比较一下 serialize()json_encode()


<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

$demo_array= array( 'Val1' => 'jiyik1', 'Val2'=> 'jiyik2', 'Val3'=>'jiyik3');

// `json_encode()` time
$start_time = microtime(true);
json_encode($demo_array);
$json_time = microtime(true) - $start_time;
echo "`json_encode()` encoded the array in $json_time seconds<br>";

// `serialize()` time
$start_time = microtime(true);
serialize($demo_array);
$serialize_time = microtime(true) - $start_time;
echo "`serialize()` serialized the array in $serialize_time seconds<br>";

// Comparing `json_encode()` and `serialize()`
if ($json_time < $serialize_time) {
    printf("json_encode() is %01.2f%% faster than serialize() for this array<br>", ($serialize_time / $json_time - 1) * 100);
}
else if ($serialize_time < $json_time ) {
    printf("serialize() is %01.2f%% faster than json_encode() for this array<br>", ($json_time / $serialize_time - 1) * 100);
} else {
    echo "Cannot Compare!<br>";
}
?>

输出:


`json_encode()` encoded the array in 9.0599060058594E-6 seconds
`serialize()` serialized the array in 5.0067901611328E-6 seconds
serialize() is 80.95% faster than json_encode() for this array

正如我们所见,对于给定的数组,serialize()json_encode 快 88.89%。

通常 serialize() 是较快的一种,但有时 json_encode() 可以运行得更快但余量非常低。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯