加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

通过PHP循环使用PHP来获取子项

发布时间:2020-12-13 15:56:14 所属栏目:PHP教程 来源:网络整理
导读:我整个上午一直在努力做一些看起来非常简单的事情,而且我的失败是悲惨的. 我有一个API请求,它返回有效的JSON数据,我需要循环遍历PHP中的各种值,以便将几个节点放入我的应用程序中. 这是JSON的一个片段 {"results": [ { "date": "2015-06-01","rates": [ { "i
我整个上午一直在努力做一些看起来非常简单的事情,而且我的失败是悲惨的.

我有一个API请求,它返回有效的JSON数据,我需要循环遍历PHP中的各种值,以便将几个节点放入我的应用程序中.

这是JSON的一个片段

{
"results": [
    {
        "date": "2015-06-01","rates": [
            {
                "id": 1592,"name": "Weekend promotion","room_rates": [
                    {
                        "room_type_id": 66,"room_type_code": "DLK","sold": 0,"sell_limit": null,"availability": 25,"out_of_order": 0,"single": 85,"double": 85,"extra_adult": null,"child": null
                    },{
                        "room_type_id": 90,"room_type_code": "DLT","availability": 11,

这就是我想要做的,但我不断收到以下错误(编辑更新cURL响应):

Notice: Trying to get property of non-object in /vagrant/web/web/bookingStep2.php on line 135

Warning: Invalid argument supplied for foreach() in /vagrant/web/web/bookingStep2.php on line 135

Notice: Trying to get property of non-object in /vagrant/web/web/bookingStep2.php on line 135

Warning: Invalid argument supplied for foreach() in /vagrant/web/web/bookingStep2.php on line 135

我有什么想法我做错了吗?第135行是这样的:

foreach($responseData为$mydata)

$url = 'https://myapi.com/availability?token=xx&from_date='.$from_date.'&to_date='.$to_date;

$options = array(
    CURLOPT_RETURNTRANSFER => true,// return web page
    CURLOPT_HEADER         => false,// don't return headers
    CURLOPT_FOLLOWLOCATION => true,// follow redirects
    CURLOPT_MAXREDIRS      => 10,// stop after 10 redirects
    CURLOPT_ENCODING       => "",// handle compressed
    CURLOPT_USERAGENT      => "test",// name of client
    CURLOPT_AUTOREFERER    => true,// set referrer on redirect
    CURLOPT_CONNECTTIMEOUT => 120,// time-out on connect
    CURLOPT_TIMEOUT        => 120,// time-out on response
); 
$ch = curl_init($url);
curl_setopt_array($ch,$options);
$result = curl_exec($ch);

curl_close($ch);


// Decode the response
$responseData = json_decode($result,TRUE);

// Put everyting to the screen with var_dump;
var_dump($responseData);

// With print_r ( useful for arrays );
//print_r($responseData);

// List just review ratings with foreach;
foreach($responseData as $mydata)
{
    foreach($mydata->results as $values) {
        echo $values->rates . "n";
    }

}

我需要能够返回以下节点….

results>rates>name
results>rates>room_rates>room_type_id
results>rates>room_rates>availability

我完全卡住了!

var_dump确实返回我的数组,因此cURL现在正常工作.

西蒙

解决方法

看起来你的cURL请求是责备,你没有告诉cURL你期待一个响应,所以cURL只是为你的初始请求传回一个布尔成功,它成功发送了它.

从PHP curl_exec page.

Returns TRUE on success or FALSE on failure. However,if the CURLOPT_RETURNTRANSFER option is set,it will return the result on success,FALSE on failure.

这是成功的,但你没有告诉它你期待一个回应,所以它返回TRUE.

试试这个:

$url = 'https://myapi.com/api?token=xxx&from_date='.$from_date.'&to_date='.$to_date;

$options = array(
    CURLOPT_RETURNTRANSFER => true,// return web page <-- This is the important one that tells cURL you want a response.
    CURLOPT_HEADER         => false,// stop after 10 redirects
    CURLOPT_AUTOREFERER    => true,$options);
$result = curl_exec($ch);

curl_close($ch);

第二个错误

现在我们有cURL工作让我们解决结果.请记住,当转换JSON时,每个大括号({)将生成一个对象,每个方括号([)将生成一个数组.因此,如果我们遵循您的JSON,我们可以看到您将获得一个包含属性结果的对象.您可以使用$responseData->结果访问它.

在你的第二个foreach中,你试图访问一个对象的属性.结果不是一个对象,它是一个数组(看看你的JSON,它包含一个[,所以它是一个数组).要获得速率,请遵循JSON字符串,您将看到需要执行此操作:

foreach($responseData->results[0]->rates as $rate) {
    echo $rate->id . "n";
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读