【问题标题】:PHP while loop curl_execPHP while 循环 curl_exec
【发布时间】:2019-01-13 20:53:41
【问题描述】:

我正在为来自curl_exec json GET 请求的每个结果创建 div。我已经在 PHP 中使用 cURL 尝试了下面的代码。当我运行这段代码时,foreach 没有任何内容。

    //API Url
    $url = 'https://api.clover.com:443/v3/merchants/'.$merchantid.'/categories/';

    //Initiate cURL.
    $ch = curl_init($url);

    $headers = array(
        'Content-type: application/json',
        'Authorization: Bearer '.$authtoken.' ',
    );

    //Tell cURL that we want to send a GET request.
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');

    //Set the content type to application/json
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    //Execute the request
    $resp = curl_exec($ch);
    $respArray = json_decode($resp, true);

    foreach($respArray as $key => $value) {
      echo $key . " : " . $value;
    }
    curl_close($ch);

这将返回以下内容:

   {
      "elements": [
        {
          "id": "QWS8MSMAT49E6",
          "name": "Other",
          "sortOrder": 2
        },
        {
          "id": "35K000MJVVFHE",
          "name": "Pizza",
          "sortOrder": 1
        }
      ],
      "href": "http://api.clover.com/v3/merchants/{[MID]}/categories?limit=100"
    }

我正在尝试将上面的信息放入一个div中,例如:

【问题讨论】:

  • 您是否收到任何错误或通知?看起来你在 foreach 循环中处理数组$respArray。但是你应该申请$respArray["elements"]
  • @LucaJung 我刚刚检查了 PHP 日志,发现 PHP Warning: Invalid argument supplied for foreach()。当你说我应该申请 $respArray["elements"] 你是什么意思?我的代码将在哪里进行更改?我可能错过了它的重点。感谢您的回复。
  • 你能发布var_dump($respArray);的输出吗?我的意思是将这一行 foreach($respArray as $key => $value) 更改为 foreach($respArray["elements"] as $key => $value)
  • @LucaJung 从var_dump($respArray); 获取int(1)
  • 如果你得到int(1)返回,你从哪里得到返回信息?

标签: php arrays json curl foreach


【解决方案1】:

认为它是这样工作的:

$data = json_decode($resp);
foreach($data->elements as $element) {
  echo '<div id="group_'.$element->id.'" class="product_group">'.$element->name.'</div>';
}

【讨论】:

  • 这仍然没有返回任何内容。并且 PHP 日志仍然显示 PHP Warning: Invalid argument supplied for foreach()
  • @Profile 这很可能是因为json_decode($resp, true)。最简单的方法是使用xdebug,然后在json_decode() 指令之后设置一个断点。见php.net/manual/en/function.json-decode.php
  • json_decode() 中删除 TRUE 是对的。设置RETURNTRANSFER TRUE 并从json_decode 中删除TRUE 确实有效。谢谢!
【解决方案2】:

我已经解决了添加的问题

curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);

到代码。正如已经解释的Here (by Mihai)

"默认情况下 curl_exec 将从服务器获取的数据输出到 标准输出,因此您的 $response 变量实际上并没有 其中的实际响应数据。如果要获取变量中的数据 在调用 curl_exec 之前设置 CURLOPT_RETURNTRANSFER 选项。"

Martin Zeitler's 答案是正确的,从json_decode() 中删除true

【讨论】:

    猜你喜欢
    • 2016-11-27
    • 1970-01-01
    • 2017-11-20
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 2012-01-02
    相关资源
    最近更新 更多