0

我正在通过以下方式收到第三方服务的回复。

  Array
(
    [created_on] => 2012-09-13 01:47:05
    [recipe] => SAMSave
    [requesters_id] => 1
    [status] => New
    [args] => a:5:{s:4:"name";a:1:{i:0;a:4:{s:10:"first_name";s:5:"Frank";s:9:"last_name";s:7:"McCourt";s:11:"middle_name";s:4:"FAKE";s:5:"email";s:0:"";}}s:3:"dob";a:3:{s:5:"month";s:4:"1955";s:4:"year";s:2:"05";s:3:"day";s:2:"15";}s:3:"ssn";s:9:"411449097";s:7:"address";a:1:{i:0;a:4:{s:6:"street";s:23:"1243 PUBLIC WORKS DRIVE";s:4:"city";s:11:"Chattanooga";s:5:"state";s:2:"TN";s:3:"zip";s:5:"37403";}}s:5:"phone";a:1:{i:0;a:2:{s:6:"number";s:0:"";s:4:"type";s:1:"P";}}}
)
true{"status":"Success","message":"Request Added!","id":416}  

从 Array 开始到结束的整个过程都是字符串格式。我必须从这个字符串中取出数据,每次我想我都会用正则表达式的解决方案来取出数据。我希望我知道一个可以将其构造成具有相同键和值的 PHP 数组的函数。如果有人有比使用正则表达式更好的解决方案,请分享您的想法/意见。

我在这个字符串上使用了反序列化并得到错误:Error at offset 0 of 654 bytes

我收到的原始响应在一行中,上面的输出是我在打印后从浏览器中获取的'<pre>'

谢谢。

4

2 回答 2

1

如果它只是序列化的 php 数据,那么试试这个:

$data = unserialized($string_from_third_party);
于 2012-09-13T06:57:50.650 回答
1

如果那是您收到的确切响应,那么看起来有人只是在打印他们的数据,甚至可能在最后还带有“真实”位的几次。

响应的样子是您已经发送了“args”中的数据,并且他们给您回复说它已成功存储。

有了这个作为我对这个答案的想法,我得出的结论是你已经在“args”中拥有数据,其余的并不是那么重要,所以,回到我说如果这是你得到的确切回应,然后只需抓住响应的最后一行,从开头去掉“true”,也可以从开头去掉“false”以保存不成功,然后使用该行剩下的字符串,你可以 json_decode 那你会得到你想要的。

举个例子:

// GIVEN: $string_from_server is set to the response
$string_from_server_split_into_lines = str_split($string_from_server, '\n');
$last_line_from_server = array_pop($string_from_server_split_into_lines);
$json_object = json_decode(str_replace('true', '', str_replace('false', '', $last_line_from_server)));
var_dump($json_object);

我知道这很乱,但嘿,听起来你是最好的选择。:)

于 2012-09-13T07:13:49.263 回答