首页 > 解决方案 > 使用PHP循环检索json数据

问题描述

我正在尝试通过循环获取数据。数据未显示在循环内。

这是我的代码:

curl_setopt_array($curl, array(
  CURLOPT_URL => "the-api-url-here",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_POSTFIELDS => "",
  CURLOPT_COOKIE => "__cfduid=d2bf2be115641329bdf9346148b5af7401597825930; XSRF-TOKEN=eyJpdiI6IllzNkloR2NaSE0zSlNFV2gySEFqclE9PSIsInZhbHVlIjoiNURQMlRQUjJveFJsYUxNdGl1Rm5YSXhzcTBKODcyUThIUlRZSUJBQXppMkhKVHdGWG85WWliTW5VQkpUZzdEciIsIm1hYyI6IjZhNjMyNzlkNGRlODczZjUxNjk0ZGY5ZWQ2NTFjYWE2NTgxMzNhOTYzNTE4NzI2ZjNkYzQ0NjIzZDY4NTVkMjMifQ%253D%253D; propertydata=eyJpdiI6IkNXVWx2Qmo3S0toWG96MVB2ZFFJUFE9PSIsInZhbHVlIjoiVEx5dWtEK1Qwa21ESFVrY2YrQ3ZyQ1MvNjdTL0Y1SWJwckhzWktaWTNBc2E5Q3ljZlRHQnZMeE5EWmxzcFhVeSIsIm1hYyI6ImFkZWFhNDMzOWJlMTRkNDY2ZTA2YTc0ODE5NDI4ZmM0M2ZiMzg3ZTY3NTg0N2NiNjZiN2E2ODE5YmRmNWUxN2YifQ%253D%253D",
  CURLOPT_HTTPHEADER => array(
    "content-type: application/json"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {

$response = json_decode($response, true);
echo 'Average Price: '. $response['data']['average'] . '<br/><br/>'; // this is shown!


foreach($response as $query){
  // this is where your WP query_posts( $args ); will go

  // this is how you'll access the array variables
  echo "<br>Query: " . $query->raw_data->address;
    
}
}

这是我的 json 数据的样子

{"status":"success","postcode":"qqqqqq","postcode_type":"full","url":"api-url","max_age":18,"data":{"points_analysed":20,"radius":"0.08","date_earliest":"2019-03-27","date_latest":"2020-06-25","average":461850,"70pc_range":[240000,550000],"80pc_range":[225000,595500],"90pc_range":[225000,895000],"100pc_range":[200000,1050000],"raw_data":[{"date":"2019-03-27","address":"72, Ditchling Road, BN1 4SG","price":1050000,"lat":null,"lng":null,"bedrooms":5,"type":null,"tenure":"freehold","class":"old_stock","distance":"0.02"},{"date":"2019-09-12","address":"106, Ditchling Road, BN1 4SG","price":470000,"lat":null,"lng":null,"bedrooms":3,"type":null,"tenure":"freehold","class":"old_stock","distance":"0.02"},{"date":"2019-06-28","address":"3, Roundhill Street, BN2 3RG","price":385000,"lat":null,"lng":null,"bedrooms":null,"type":null,"tenure":"freehold","class":"old_stock","distance":"0.03"},{"date":"2019-08-30","address":"15, Roundhill Street, BN2 3RG","price":420000,"lat":null,"lng":null,"bedrooms":3,"type":null,"tenure":"freehold","class":"old_stock","distance":"0.03"},{"date":"2020-01-20","address":"29, Belton Road, BN2 3RE","price":545000,"lat":"50.83630150","lng":"-0.13244240","bedrooms":4,"type":null,"tenure":"freehold","class":"old_stock","distance":"0.03"},{"date":"2019-12-12","address":"St Saviours Court, Flat 4, Ditchling Road, BN1 4SU","price":225000,"lat":"50.83600530","lng":"-0.13386500","bedrooms":null,"type":"flat","tenure":"leasehold","class":"old_stock","distance":"0.04"},{"date":"2019-08-23","address":"St Saviours Court, Flat 14, Ditchling Road, BN1 4SU","price":243000,"lat":null,"lng":null,"bedrooms":null,"type":"flat","tenure":"leasehold","class":"old_stock","distance":"0.04"},{"date":"2019-11-29","address":"128, Ditchling Rise, BN1 4QR","price":895000,"lat":"50.83647270","lng":"-0.13375510","bedrooms":4,"type":null,"tenure":"freehold","class":"old_stock","distance":"0.05"},{"date":"2019-12-05","address":"37, Princes Crescent, BN2 3RA","price":440000,"lat":"50.83524460","lng":"-0.13272890","bedrooms":2,"type":null,"tenure":"freehold","class":"old_stock","distance":"0.05"},{"date":"2020-01-10","address":"32, Princes Road, BN2 3RH","price":535000,"lat":"50.83663710","lng":"-0.13214130","bedrooms":3,"type":null,"tenure":"freehold","class":"old_stock","distance":"0.06"},{"date":"2019-06-12","address":"24, Crescent Road, BN2 3RP","price":550000,"lat":null,"lng":null,"bedrooms":4,"type":null,"tenure":"freehold","class":"old_stock","distance":"0.06"},{"date":"2020-04-03","address":"62, Crescent Road, BN2 3RP","price":540000,"lat":"50.83567610","lng":"-0.13163990","bedrooms":null,"type":null,"tenure":"freehold","class":"old_stock","distance":"0.06"},{"date":"2019-07-12","address":"9, Crescent Road, BN2 3RP","price":475000,"lat":null,"lng":null,"bedrooms":3,"type":null,"tenure":"freehold","class":"old_stock","distance":"0.06"},{"date":"2019-09-13","address":"2, Flat 2, Crescent Road, BN2 3RP","price":225000,"lat":null,"lng":null,"bedrooms":null,"type":"flat","tenure":"leasehold","class":"old_stock","distance":"0.06"},{"date":"2020-01-29","address":"25, Princes Road, BN2 3RH","price":515000,"lat":"50.83681580","lng":"-0.13230140","bedrooms":3,"type":null,"tenure":"freehold","class":"old_stock","distance":"0.07"},{"date":"2020-02-10","address":"14, Vere Road, BN1 4NR","price":500000,"lat":"50.83530370","lng":"-0.13434380","bedrooms":5,"type":null,"tenure":"freehold","class":"old_stock","distance":"0.07"},{"date":"2019-11-22","address":"32, Vere Road, BN1 4NR","price":338500,"lat":"50.83569970","lng":"-0.13451380","bedrooms":2,"type":"flat","tenure":"leasehold","class":"old_stock","distance":"0.07"},{"date":"2020-01-31","address":"10, Crescent Road, BN2 3RP","price":595500,"lat":"50.83647370","lng":"-0.13147010","bedrooms":4,"type":null,"tenure":"freehold","class":"old_stock","distance":"0.07"},{"date":"2019-11-22","address":"55, Ground Floor Flat, Vere Road, BN1 4NQ","price":240000,"lat":"50.83526180","lng":"-0.13449100","bedrooms":null,"type":"flat","tenure":"leasehold","class":"old_stock","distance":"0.08"},{"date":"2020-06-25","address":"73, Princes Crescent, BN2 3RA","price":200000,"lat":"50.83549010","lng":"-0.13122770","bedrooms":null,"type":null,"tenure":"freehold","class":"old_stock","distance":"0.08"}]},"process_time":"0.02"}

为什么循环上什么都没有显示?我究竟做错了什么?

标签: phpjsonapi

解决方案


这应该有效:

foreach($response['data']['raw_data'] as $raw_data){
    echo "<br>Query: " . $raw_data['address'];
}

json_decode 返回一个关联数组。(因为第二个参数)在您的 foreach 中,您使用的是对象表示法。


推荐阅读