使用从REST服务检索的PHP数组

时间:2014-08-07 20:01:08

标签: php arrays rest

我希望使用从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获取数据,但当然它不再是数组。 将此转换回可用数组的最佳方法是什么?

2 个答案:

答案 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