相关疑难解决方法(0)

存储PHP数组的首选方法(json_encode vs serialize)

我需要在平面文件中存储多维关联数据数组以用于缓存目的.我偶尔会遇到将其转换为JSON以便在我的Web应用程序中使用的需要,但绝大多数时候我将直接在PHP中使用该数组.

将数组作为JSON或PHP序列化数组存储在此文本文件中会更有效吗?我环顾四周,似乎在最新版本的PHP(5.3)中,json_decode实际上比它更快unserialize.

我目前倾向于将数组存储为JSON,因为我觉得如果有必要,人们可以更容易地阅读它,它可以在PHP和JavaScript中轻松使用,而且从我读过的,它甚至可能是更快解码(不确定编码).

有谁知道任何陷阱?任何人都有良好的基准来展示这两种方法的性能优势?

php arrays performance serialization json

590
推荐指数
12
解决办法
18万
查看次数

将PHP对象图序列化/反序列化为JSON

我想将一个完整的PHP对象图序列化为JSON字符串表示,并将其反序列化为相同的PHP对象图.

以下是我考虑的选项摘要,以及它们不适合我的原因:

  • serialize()没有做我想要的,因为它使用特定于PHP的格式.我想要一种大多数语言广泛支持的格式,以及人类可读/可编辑的格式.

  • json_encode()没有做我想要的,因为它只做简单的值和数组,而不是对象.(我实际上是在我的实现中使用它,见下文.)

  • var_export()不处理循环引用,并且不执行我想要的操作(参见上文.)(请注意,我当前的实现也不处理循环引用 - 请参阅下面的注释和回复以澄清此问题.)

  • Sebastian Bergmann的Object Freezer是一个很好的实现,但它不能做我想要的 - 它使用很长的形式,并依赖于使用GUID填充序列化对象.

  • 序列化没有做我想要的 - 它实际上不执行序列化,它解析输出serialize()并产生不同的表示,例如XML,但无法解析该表示.(它也不支持JSON - XML格式很长,并不是我想要的.)

我现在有一个工作实现分享:

https://github.com/mindplay-dk/jsonfreeze

对象图的JSON表示如下所示:

{
    "#type": "Order",
    "orderNo": 123,
    "lines": [{
        "#type": "OrderLine",
        "item": "milk \"fuzz\"",
        "amount": 3,
        "options": null
    }, {
        "#type": "OrderLine",
        "item": "cookies",
        "amount": 7,
        "options": {
            "#type": "#hash",
            "flavor": "chocolate",
            "weight": "1\/2 lb"
        }
    }],
    "paid": true
}
Run Code Online (Sandbox Code Playgroud)

此方法旨在用于纯树结构聚合 - 不允许循环引用,也不允许对同一对象进行多次引用.换句话说,这不是通用的,例如serialize(),unserialize()任何PHP对象图的功能.

在我最初的方法中,我使用了一个序列化的表单,它基本上是一个基础0对象列表.列表中的第一个对象(编号0)是序列化对象图的根,任何其他对象按其找到的顺序存储.

在当前实现中,JSON表示类似于可能的扩展的原始树结构,使得实际使用JavaScript中的对象图的JSON表示成为可能.唯一的偏差是magic #type属性(前缀为#以防止与属性名冲突)和 …

php arrays serialization json reference

6
推荐指数
1
解决办法
4240
查看次数

标签 统计

arrays ×2

json ×2

php ×2

serialization ×2

performance ×1

reference ×1