-1

Rubyで実行できることはわかっていますが、配列内の配列をPHPで解析する必要があります。

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

$_POST['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そうすれば、このナンセンスについて心配する必要はありません。また、健全性のために、データは実際にはフィールドごとに 1 つの定数型でのみシリアル化する必要があります。

于 2012-08-18T22:28:13.617 に答える