我希望使用从RESTful服务获得的PHP数组。
它们的数组只是一个输出如下的简单数组,
array (
0 =>
stdClass::__set_state(array(
'id' => '375',
'primary_name' => 'Beaufort 3',
'price' => '',
'sqft' => '2435',
'bdrm' => '3',
'bthm' => '2.5',
'display_title' => 'Traditional A1',
'full_img_path' => '',
'thumb_path' => '',
'available_in' => 'a:2:{i:0;s:1:"2";i:1;s:1:"5";}',
'display_first' => '',
)),
)
我使用file_get_contents
获取数据,但当然它不再是数组。 将此转换回可用数组的最佳方法是什么?
答案 0 :(得分:5)
我从来没有见过提供此服务的服务,可能是因为它是人们会避免使用的东西,但看起来它可能是他们希望能够与eval()
一起使用的东西。我想这可能是为了方便。不过,我认为他们犯了错误。如果你在这样的数组上使用var_export
(我假设它是如何生成的):
$example = array (
array(
'id' => '375',
'primary_name' => 'Beaufort 3',
'price' => '',
'sqft' => '2435',
'bdrm' => '3',
'bthm' => '2.5',
'display_title' => 'Traditional A1',
'full_img_path' => '',
'thumb_path' => '',
'available_in' => 'a:2:{i:0;s:1:"2";i:1;s:1:"5";}',
'display_first' => '',
)
);
然后你会得到一些你可以eval
到变量中并在你的代码中使用的东西。但是,如果你var_export
一组匿名对象而不是一组关联数组,你将得到你得到的响应类型,我不知道如何使用它。我猜他们是var_export
查询的结果,他们使用FETCH_OBJ而不是FETCH_ASSOC作为获取样式。
编辑: 在写完这篇文章后,我正在浏览关于var_export的评论,并且遇到了这样做的方法。
$str = str_replace("stdClass::__set_state", "(object)", $str);
eval('$array=' . $str . ';');
但仅仅因为某些事情是可能的并不意味着我们应该这样做。
答案 1 :(得分:3)
您可以将其转换回eval()
的数组。 http://php.net/manual/en/function.eval.php
eval('$array='.$response.';');
但是,这可能很危险,因为eval会接受任何给定的PHP代码 - 如果服务受到威胁,您的代码将执行传递给它的任何内容。 JSON,如果服务支持它,则自5.2以后通过json_decode()
在PHP中更加安全和本机支持。 http://php.net/manual/en/function.json-decode.php