-1

我知道它可以在 Ruby 中完成,但我需要解析 PHP 中的数组中的数组。

POST
{
Payload
{
amount="xxx",
uid="xxx",
actual_amount="xxx"
},
signature
}

我可以使用 $_POST['payload'] 来访问 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:#)

4

2 回答 2

6

有一个名为 的函数json_decode(),它将帮助您执行此任务。

$payload = json_decode($_POST['payload']);
var_dump($payload['amount']); // string(3) "xxx"
于 2012-08-18T22:12:16.637 回答
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)));

?>

http://codepad.org/jaHT6lfW

给出:

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);

?>

http://codepad.org/mpfDLyvH

给出正确的输出。

说真的,在使用数组之后,在将其插入数据库之前,只需对所有内容进行 JSON 编码。$_POST如果您这样做,您将不必担心这种废话。为了理智起见,您的数据实际上应该只使用每个字段的一种常量类型进行序列化。

于 2012-08-18T22:28:13.617 回答