PHP在线运行

版本:

所属目录
点击了解高性能代码运行API
运行结果
教程手册
代码仓库
极速运行
终端运行
图形+终端

                        
以下是用户最新保存的代码
保存判断学年学期方法 发布于:2024-03-16 14:20 <?php $a="system"; $a=urlencode(~$a); // ~ 取反写法 $b="cat /f*"; $b=urlencode(~$b); echo $a."\n".$b; ?> 发布于:2024-03-13 16:33 php 加解密 发布于:2024-03-11 21:51 测试某接口。 发布于:2024-03-07 15:46 正则匹配规则 发布于:2024-03-04 13:55 这是一个测试代码 发布于:2024-02-02 21:51 NAVICAT KEY 发布于:2024-02-02 15:44 生成唯一UUID 发布于:2024-02-01 14:55 在PC端运行的便签,带阳历和阴历、还有时间 发布于:2024-01-30 11:10 PHP 检查代码是否为js代码片段,并检出js代码片段的内容 发布于:2024-01-16 11:45 import docx 发布于:2024-01-12 09:40 import docx 2 发布于:2024-01-12 01:52 import doc 发布于:2024-01-11 22:33 Test-1128-74 发布于:2023-11-28 17:36 php只读类 发布于:2023-11-20 10:02 筛选配置中配置字段名中含有指定字符串的元素 发布于:2023-11-08 18:59 php 将数组中的每一项的键值和键名分别取出来组成一个新的元素 发布于:2023-11-01 11:35 组装全新的数组,可以是字符串,也可以是数组,当value为数组时,请保证value中的子元素数量与$num值保持一致且子元素中的项数与$key中的项数保持一致,否则值会被填充为0 发布于:2023-11-01 18:04 php将每一项提取出来,单独成数组 https://www.zaiwen.top/#/chat/working-edition https://ch.dmjo.cn/ https://go.aigongju.shop/index.php?id=2 发布于:2023-10-31 23:55 直接插入排序算法的PHP实现 发布于:2023-10-20 17:24 速算扣除法 发布于:2023-10-16 14:54 登陆错误限制次数 发布于:2023-10-16 11:18 黑名单处理方式 发布于:2023-10-16 11:17 计算五险一金的相关代码 发布于:2023-10-13 18:27 PHP基础的一些功能片段 发布于:2023-10-07 17:02 PHP 获取指定年份的半年月份列表函数 发布于:2023-10-07 13:54 收件人解析 发布于:2023-09-30 10:32 <html> <head> <title>Example</title> </head> <body> <?php echo “Hello 7777P7HP!”; ?> </body> </html> 发布于:2023-09-19 17:58 测试加解密 发布于:2023-09-18 14:18 去除重复的元素 发布于:2023-09-13 16:49 php 随机红包 发布于:2023-09-02 09:45 PHP第一个程序 发布于:2023-09-01 04:57 php8.0注解 发布于:2023-08-15 16:15 remove emoji 发布于:2023-07-29 22:05 哭我了流量卡 发布于:2023-07-27 12:13 角谷猜想python 发布于:2023-06-26 16:36 navicat密码解密 发布于:2023-06-15 10:46 <?php // 初始化人员编号数组 $numbers = array(1, 2, 3, 4, 5, 6, 7); // 循环报数直到只剩一个人 while (count($numbers) > 1) { // 报数到5的人退出游戏 for ($i = 1; $i <= 5; $i++) { $number = array_shift($numbers); if ($i == 5) { echo "第" . count($numbers) . "轮出局的人是:" . $number . "<br>"; } else { array_push($numbers, $number); } } } // 最后一个留下来的人为要去完成任务的人 echo "最后要去完成任务的人的编号是:" . $numbers[0]; ?> 发布于:2023-06-13 21:09 获取子元素 发布于:2023-08-09 16:25 这段PHP代码初始化了一个包含两个元素的数组$array,都设置为字符串'3'。然后使用foreach循环遍历数组的每个元素。在循环内部,它将字符串'a'赋值给循环变量$v。 但是,由于$v是一个循环变量,在循环中更改其值不会修改数组元素。因此,在循环完成后,数组$array的内容保持不变,两个元素仍然设置为字符串'3'。 发布于:2023-05-26 15:07 eq日志解析 发布于:2023-05-17 11:56 手机号匹配靓号 发布于:2023-05-17 14:37 找猴王游戏 发布于:2023-05-04 16:58 三.PHP常量学习 发布于:2023-05-01 22:47 ### 二.变量 `1.`变量的基本概念。 `2.`变量的使用 `3.`变量的命名规则 `4.`预定义变量 `5.`可变变量 `6.`变量传值 发布于:2023-05-01 21:03 枚举SKU 发布于:2023-04-17 13:00 PHP判断IP是否属于某个网段 发布于:2023-04-07 18:26 php zuoye 发布于:2023-04-07 11:55 雷弟 看这里 发布于:2023-04-03 15:13 PHP - Hello world 发布于:2023-04-01 14:05 [更多]
显示目录

PHP 序列化和反序列化的方法函数.



学习嵌入式的绝佳套件,esp8266开源小电视成品,比自己去买开发板+屏幕还要便宜,省去了焊接不当搞坏的风险。 蜂鸣版+触控升级仅36元,更强的硬件、价格全网最低。

点击购买 固件广场

PHP 序列化和反序列化的方法函数

我们在开发的过程中常常遇到需要把对象或者数组进行序列号存储,反序列化输出的情况。特别是当需要把数组存储到mysql数据库中时,我们时常需要将数组进行序列号操作。

序列化(串行化):是将变量转换为可保存或传输的字符串的过程;

反序列化(反串行化):就是在适当的时候把这个字符串再转化成原来的变量使用。

这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性。

常见的php系列化和反系列化方式主要有:serialize,unserialize;json_encode,json_decode。

常见使用情况

a.对象系列化使用情况:

对象的创建的时候被存储到内存里,在解析的时候被销毁,如果机器重启,那么对象也将被销毁在新建。想要保存对象或者将对象传给另一台机器,就需要将对象串行化(序列化);或者在需要存储数据到mysql等数据库中时需要系列化。

将对象转化成字符串叫系列化(串行化)

将字符串转化成对象叫反系列化(反串行化)

b.数组系列化使用情况:

在跨语言,跨设备传输数组时,存放数据库或nosql数据库时,由于两者之间的数据格式不同,所以要将数据统一转成json(JavaScript object )格式传输。

1. serialize和unserialize函数

这两个是序列化和反序列化PHP中数据的常用函数。

<?php
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');

//序列化数组
$s = serialize($a);
echo $s;
//输出结果:a:3:{s:1:"a";s:5:"Apple";s:1:"b";s:6:"banana";s:1:"c";s:7:"Coconut";}
echo '<br /><br />';

//反序列化
$o = unserialize($s);
print_r($o);
//输出结果 Array ( [a] => Apple [b] => banana [c] => Coconut )
?>

当数组值包含如双引号、单引号或冒号等字符时,它们被反序列化后,可能会出现问题。为了克服这个问题,一个巧妙的技巧是使用base64_encode和base64_decode。

$obj = array();
//序列化
$s = base64_encode(serialize($obj)); 
//反序列化
$original = unserialize(base64_decode($s));` 

但是base64编码将增加字符串的长度。为了克服这个问题,可以和gzcompress一起使用。  

`//定义一个用来序列化对象的函数
function my_serialize( $obj ) { 
   return base64_encode(gzcompress(serialize($obj))); 
} 

//反序列化
function my_unserialize($txt) { 
   return unserialize(gzuncompress(base64_decode($txt))); 
}

2. json_encode 和 json_decode

使用JSON格式序列化和反序列化是一个不错的选择:

  • 使用json_encode和json_decode格式输出要serialize和unserialize格式快得多。
  • JSON格式是可读的。
  • JSON格式比serialize返回数据结果小。
  • JSON格式是开放的、可移植的。其他语言也可以使用它。
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');

//序列化数组
$s = json_encode($a);
echo $s;
//输出结果:{"a":"Apple","b":"banana","c":"Coconut"}

echo '<br /><br />';

//反序列化
$o = json_decode($s);

在上面的例子中,json_encode输出长度比上个例子中serialize输出长度显然要短。

3. var_export 和 eval

var_export 函数把变量作为一个字符串输出;eval把字符串当成PHP代码来执行,反序列化得到最初变量的内容。

$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
//序列化数组
$s = var_export($a , true);
echo $s;
//输出结果: array ( 'a' => 'Apple', 'b' => 'banana', 'c' => 'Coconut', )
echo '<br /><br />';

//反序列化
eval('$my_var=' . $s . ';');

print_r($my_var);

4. wddx_serialize_value 和 wddx deserialize

wddx_serialize_value函数可以序列化数组变量,并以XML字符串形式输出。

$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');

//序列化数组
$s = wddx_serialize_value($a);
echo $s;

//输出结果(查看输出字符串的源码):<wddxPacket version='1.0'><header/><data><struct><var name='a'><string>Apple</string></var><var name='b'><string>banana</string></var><var name='c'><string>Coconut</string></var></struct></data></wddxPacket>

echo '<br /><br />';

//反序列化
$o = wddx_deserialize($s);

print_r($o);
//输出结果:Array ( [a] => Apple [b] => banana 1 => Coconut )

可以看出,XML标签字符较多,导致这种格式的序列化还是占了很多空间。

5.php反序列化工具

     使用[PHP反序列化工具](https://www.w3cschool.cn/tools/index?name=unserialize)进行测试

小结

上述所有的函数在序列化数组变量时都能正常执行,但运用到对象就不同了。例如json_encode序列化对象就会失败。反序列化对象时,unserialize和eval将有不同的效果。

如果是多维数组进行json_encode系列化时可能会出现报错或者无法系列化情况,这个时候就需要使用一些开源的JSON处理库,此类库在网上很多,需要时可以下载辅助使用。

由JSRUN为你提供的PHP在线运行、在线编译工具
        JSRUN提供的PHP 在线运行,PHP 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。
yout