通过PHP循环使用PHP来获取子项
我整个上午一直在努力做一些看起来非常简单的事情,而且我的失败是悲惨的.
我有一个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.
这是成功的,但你没有告诉它你期待一个回应,所以它返回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"; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |