我有一个插件,它是woocommerce的扩展。该插件将信息存储在MySQL表"wp_woocommerce_order_itemmeta"下。在"meta_key"列下,有"_wc_deposit_meta"。在"meta_key"列旁边,我有"meta_value"。在"meta_value"下,您可以找到a:5:{s:6:"enable";s:3:"yes";s:7:"deposit";d:197.67000000000001591615728102624416351318359375;s:9:"remaining";d:401.32999999999998408384271897375583648681640625;s:5:"total";d:599;s:5:"ratio";d:1;}
.在学习PHP时,我从未遇到过这样的值。有人可以解释一下这个值是什么以及我如何访问"存款"的价值。这只是多维数组的另一个示例吗?
我一直试图通过在我的函数.php中$my_order = $order->get_items();
来访问这个值,它返回一个数组。我看到名为"_wc_deposit_meta"的正确数组具有这个奇怪的值,由于逗号和冒号,我不知道如何访问该值。
很抱歉菜鸟问题,但我一直在尝试研究这个购买找不到简单的黑白答案。如果有人能指出我正确的方向,我将不胜感激。
当WordPress需要将多维数据存储到字段中时,它会应用PHP的serialize()
函数将数据转换为可存储的字符串,然后在读取值时unserialize()
将其返回到正确的数据结构。
序列化数据定义的剖析在 PHP serialize()
文档的第一条注释中描述:
- 字符串:
s:[size]:[value];
- 整数:
i:[value];
- 双人间:
d:[value];
- 布尔值:
b:[value];
(不存储"真"或"假",存储"1"或"0"(- 空:
N;
- 阵列:
a:[size]:{[key definition];[value definition];(repeated per element)}
- 对象:
O:[strlen(object name)]:[object name]:[object size]:{s:[strlen(property name)]:[property name]:[property definition];(repeated per property)}
更具体地说,WordPress使用自己的maybe_serialize()
和maybe_unserialize()
包装器来减少不必要的(取消(序列化的机会。
在您正在使用的特定序列化数据中,您的存款由键/值定义表示 s:7:"deposit";d:197.67000000000001591615728102624416351318359375;
。要手动更改您的存款价值,您需要在 d:
之后修改双精度。要在 WordPress 中以编程方式修改值,请使用元数据 API 使用"get"函数查询字段(这将隐式反序列化它(,修改返回的关联数组中'deposit'
字段的值,然后使用元数据 API 中的"更新"函数保存新值。
您正在查看的值已serialized()
并存储在数据库中。只需获取该变量并在其上使用unserialize()
,如下所示:
$myVal = unserialize($databaseColumn);
- 序列 化
- 反序列化