我有一个插件,是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时,我从来没有遇到过这样的价值。有人可以解释这个值是什么,以及如何访问“存款”的值。这只是多维数组的另一个例子吗?
我一直在尝试通过我的functions.php中的$my_order = $order->get_items();
访问此值,该函数返回一个数组。我看到一个名为“_wc_deposit_meta”的正确数组,这个奇怪的值因为逗号和冒号而不知道如何访问。
对于noob问题我很抱歉,但我一直在努力研究这个购买无法找到一个简单的黑白答案。如果有人能指出我正确的方向,我会非常感激。
答案 0 :(得分:1)
您正在查看的值为serialized()
并存储在数据库中。只需使用该变量并在其上使用unserialize()
,如下所示:
$myVal = unserialize($databaseColumn);
答案 1 :(得分:1)
当WordPress需要将多维数据存储到字段中时,它应用PHP的serialize()
函数将数据转换为可存储的字符串,然后在读取值时将unserialize()
返回给它它的正确数据结构。
序列化数据定义的解剖结构在PHP serialize()
文档的第一条评论中有所描述:
- 字符串:
s:[size]:[value];
- 整数:
i:[value];
- Double:
d:[value];
- 布尔值:
b:[value];
(不存储" true"或" false",存储' 1'或' 0&#39 ;)- Null:
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中以编程方式修改值,请使用Metadata API使用" get"来查询字段。函数(将隐式地反序列化它),修改返回的关联数组中'deposit'
字段的值,然后使用"更新"保存新值。来自Metadata API的功能。