我知道它可以在Ruby中完成,但我需要在PHP中解析数组中的数组。
POST
{
Payload
{
amount="xxx",
uid="xxx",
actual_amount="xxx"
},
signature
}
我可以使用$ _POST ['payload']访问Payload, 但是如何访问有效负载数组中的元素? 从技术上讲,Payload是一个JSON数组。 喜欢这个
a:2:s:7:"payload";s:61:"{"amount":25,"adjusted_amount":17.0,"uid":"brainiac"}";s:9:"signature";s:40:"fbc4e6081d2d1d5d3894dd26a09c4d6b97c9e591";}
如果你仔细观察JSON数组,你会发现有效载荷数组根本就不是一个数组。这是字符串! (S:#)
答案 0 :(得分:6)
有一个名为json_decode()
的功能,可以帮助您完成此任务。
$payload = json_decode($_POST['payload']);
var_dump($payload['amount']); // string(3) "xxx"
答案 1 :(得分:1)
我终于想到我想出来了。即:
<?php
$post = array();
$post['array1'] = json_encode(array(
'info1' => 'test 1',
'info2' => 'test 2',
'info3' => 'test 3'
));
$post['info4'] = '#';
echo serialize($post);
echo "\n";
var_dump(unserialize(serialize($post)));
?>
给出:
a:2:{s:6:"array1";s:52:"{"info1":"test 1","info2":"test 2","info3":"test 3"}";s:5:"info4";s:1:"#";}
array(2) {
["array1"]=>
string(52) "{"info1":"test 1","info2":"test 2","info3":"test 3"}"
["info4"]=>
string(1) "#"
}
所以:
<?php
$post = array();
$post['array1'] = json_encode(array(
'info1' => 'test 1',
'info2' => 'test 2',
'info3' => 'test 3'
));
$post['info4'] = '#';
$serial = serialize($post);
echo "$serial\n";
$unserial = unserialize(serialize($post));
var_dump($unserial);
$unserial['array1'] = json_decode($unserial['array1']);
var_dump($unserial);
?>
提供正确的输出。
说真的,在将{<1}}数组插入数据库之前,只需将JSON编码为 all 。如果你这样做,你不必担心这个废话。为了理智,你的数据实际上应该只为每个字段的一个常量类型序列化。