首页 > 解决方案 > 在 PHP 中访问 c​​url 响应的变量

问题描述

这是我第一次使用 curl,我很困惑 $response 的格式究竟如何,以及我如何访问我想要的信息。我正在尝试从 PHP 中的 curl 响应访问特定变量,以便在将来的条件中使用。我获得了用作 API 端点的 URL 和标头,因此无法对此进行任何更改。这是 curl 响应的代码:

    $ch = curl_init();

    $url = "https://thewebsitesurl.com";
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'x-branch: 21', 
    'x-branchhash: fijef89ivjw8934y8f9fifk920a',
    'accept: application/json'
    ));

    $response = curl_exec($ch);`

var_dump($response) 的内容产生:

string(187) "{"code":"5122","time":"1589812650","voucher":{"code":"5122","comments":"","amount":"11.00","balance":"11.00","created":"1589609333","expiry":"1652616000","redeemed":false,"voided":false}}"

我需要访问“已赎回”和“作废”字段。当然,这是一个很大的长字符串意味着我不能这样做(我相信)。我应该设置一个 CURLOPT 以使响应不会作为一个大字符串接收吗?

此外,如果我用 $data = var_dump(json_decode($result, true)); 内容是:

array(3) { ["code"]=> string(4) "5122" ["time"]=> string(10) "1589814039" ["voucher"]=> array(8) { ["code"]=> string(4) "5122" ["comments"]=> string(0) "" ["amount"]=> string(5) "11.00" ["balance"]=> string(5) "11.00" ["created"]=> string(10) "1589609333" ["expiry"]=> string(10) "1652616000" ["redeemed"]=> bool(false) ["voided"]=> bool(false) } }

对我来说,这似乎比长字符串更可行。但是,我正在努力访问 ["expiry"]、["redeemed'] 和 ["voided"] 变量。事实上,我只是在努力访问我尝试过的 ["code"] 字符串“5122”:

echo $data[0]['code'];
echo $data[0]["code"];
echo $data['code'];
echo $data["code"];

所有 4 个回声都是空白的。我试图删除“curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);” 也是。之后 var_dump($result); 好像 :

 {"code":"5122","time":"1589815247","voucher":{"code":"5122","comments":"","amount":"11.00","balance":"11.00","created":"1589609333","expiry":"1652616000","redeemed":false,"voided":false}}bool(true)

我可能在这里误解了一些基本的东西。但是对于如何访问 ["expiry"]、["redeemed'] 和 ["voided"] 中的值的任何帮助,我们将不胜感激。感谢您的帮助。

标签: phpjsoncurl

解决方案


$data = json_decode($result, true);

这将返回一个数组

$data = json_decode($result);

这将返回一个对象。

请勿var_dump在 this 内部使用,因为它是一个解析函数,仅用于转储数据。所以最终应该是:

$data = json_decode($result, true);
$code = $data['code']; // " or ' are not different in this case

推荐阅读