我的问题很基本.

我没有找到任何例子来满足我的需求,比如serialize()unserialize()在php中到底意味着什么?他们只是给出了一个例子——序列化一个数组,并以无法解释的格式显示输出.通过他们的行话很难理解基本概念.

EDIT:

<?php

$a= array( '1' => 'elem 1', '2'=> 'elem 2', '3'=>' elem 3');
print_r($a);
echo ("<br></br>");
$b=serialize($a);
print_r($b);

?>

输出:

Array ( [1] => elem 1 [2] => elem 2 [3] => elem 3 ) 

a:3:{i:1;s:6:"elem 1";i:2;s:6:"elem 2";i:3;s:7:" elem 3";}

我无法理解第二个输出.除此之外,有人能举一个例子说明我在使用php数组之前需要序列化它吗?

推荐答案

PHP数组或对象或其他complex data structure不能在running PHP script之外传送或存储或以其他方式使用.如果您想让这样一个复杂的数据 struct 超过脚本的一次运行,那么您需要对其进行serializeit.这仅仅意味着将 struct 放到一个"较低的公分母"中,可以由PHP以外的其他东西处理,如数据库、文本文件、套接字.标准的PHP函数serialize只有a format来表示这样的东西,它将数据 struct 序列化为PHP特有的字符串表示形式,并且可以使用unserialize将其反转为PHP对象.不过,还有许多其他格式,如JSON或XML.


以这个常见问题为例:

How do I pass a PHP array to Javascript?

PHP和Javascript只能通过字符串进行通信.可以很容易地将字符串"foo"传递给Javascript.您可以很容易地将数字1传递给Javascript.您可以轻松地将布尔值truefalse传递给Javascript.但是如何将这个数组传递给Javascript呢?

Array ( [1] => elem 1 [2] => elem 2 [3] => elem 3 ) 

答案是serialization.对于PHP/Javascript,JSON实际上是更好的序列化格式:

{ 1 : 'elem 1', 2 : 'elem 2', 3 : 'elem 3' }

Javascript可以轻松地将其转换为实际的Javascriptarray.

这对于同一数据 struct 的表示同样有效:

a:3:{i:1;s:6:"elem 1";i:2;s:6:"elem 2";i:3;s:7:" elem 3";}

但几乎只有PHP使用它,其他地方几乎不支持这种格式

<array>
    <element key='1'>elem 1</element>
    <element key='2'>elem 2</element>
    <element key='3'>elem 3</element>
</array>

在很多情况下,你需要将complex data structures作为字符串传递.将任意数据 struct 表示为字符串的序列化解决了这一问题.

Php相关问答推荐

使用HPOS自动删除Woocommerce中3个月以上的已完成订单

调用woocommerce_customer_Save_add动作挂钩时发生致命错误

使用额外的输入字段自定义WooCommerce单个产品

在PHP中替换数组中的文本并同时使用其他函数

以编程方式更新现有Yith WooCommerce Booking的状态

自定义WooCommerce帐户下载列表

使用.htaccess将任何路由重定向到文件

免费送货柜台,考虑到折扣码

根据WooCommerce Cart小计阈值自动应用优惠券

在php中,方法之间的属性链接是如何工作的

将购物车按钮重定向到Checkout-Wooccommerce

在WooCommercel邮箱通知上添加来自Apaczka插件的选定交付点

Golang - Html 模板:如何创建导航项 - 子菜单?我找不到怎么做

在 WooCommerce wc_get_products 函数中处理自定义分类法

根据页面的最后修订日期设置 MediaWiki 内部链接的样式

使用 PHP 的 OAuth 2.0 MAC

自定义主键值未正确显示

每个发布请求 Laravel 9 的 CSRF 令牌不匹配

Laravel 从嵌套数组的第二级获取最后一项

使用 v-for 的存储链接中的 Img src 在 Laravel vuejs 中不起作用