[英]Getting data from json response using Yelp API
我有一個使用Yelp API使用緯度和經度獲得最接近點的10個結果的客戶端。 api查詢將類別的“列表”組合在一起,然后將其傳遞給Yelp中的查詢。
像這樣:
$categories = [ 'pharmacy', 'hospitals', 'firedepartments', 'policedepartments', 'parks', 'restaurants', 'grocery' ];
$list = join($categories, ",");
進行該調用時,Yelp似乎無法正確返回所有類別別名。 但是,當分別調用每個類別時,它確實返回類別別名的權利。
因此,當我使用foreach()語句循環分類時,如下所示:
foreach($categories as $k=>$v){
$resulted = yelp_search($v, $range, $lat, $lon, $num);
$resulted = json_decode($resulted, true);
$result[] = array_merge($result, $resulted);
}
它將添加到$ result數組中。 但是問題在於,它只會將最后一個類別添加到列表中,例如在這種情況下為“食品雜貨”。 因此,當將javascript中的函數選擇為“最近”時,它將僅在地圖上和列表中顯示雜貨店圖標,而不顯示其返回的所有內容。
這是問題1,問題2是這個。 在顯示的列表中,由於將“類別”設置為與javascript中的函數“最接近”,因此我必須仔細檢查返回的json數據中的類別,並檢查其是否與列表中的某些內容匹配。
像這樣
for (var i = 0; i < count; i++) {
var b = results[category]['businesses'][i];
if(category == "closest"){
ccount = b.categories.length;
for(var m = 0; m < ccount; m++){
console.log(b.categories[m]['alias']);
var alias = cats.includes(b.categories[m]['alias']);
if(alias){
var c = b.categories[m]['alias'];
break;
}
else{
var c = results[category]['category_name'];
}
}
update = update + '<tr><td role="button" class="td_menu" data-category="' + c + '" data-index="' + i + '"><img style="height: 20px; padding-right: 5px;" src="<?php echo get_template_directory_uri(); ?>/images/' + c + '.png"><span style="vertical-align: top;">' + b.name +
'</span></td><td></td><td>' + (b.distance * 0.00062137).toFixed(2) + '</td><td>mi</td></tr>\n';
}
else{
update = update + '<tr><td role="button" class="td_menu" data-category="' + category + '" data-index="' + i + '"><img style="height: 20px; padding-right: 5px;" src="<?php echo get_template_directory_uri(); ?>/images/' + category + '.png"><span style="vertical-align: top;">' + b.name +
'</span></td><td></td><td>' + (b.distance * 0.00062137).toFixed(2) + '</td><td>mi</td></tr>\n';
}
}
所有這部分似乎都可以正常工作,因為它確實返回了正確的類別別名(又名食品雜貨店),並且列表中的圖標也確實顯示了。 我懷疑一旦我弄清楚如何解決問題#1,問題#2就會解決。
我需要一些指導。 我花了2天的時間來解決這個問題,並在列表中顯示適當的圖標,並獲取最接近的數據,以便它確實包含數據中的所有別名。
Yelp的答案還包含元數據,您不能僅將它們連接起來:您只想合並業務:
$result = array();
foreach($categories as $k=>$v){
$resulted = yelp_search($v, $range, $lat, $lon, $num);
$resulted = json_decode($resulted, true);
if(array_key_exists('businesses', $result))
$result['businesses'] = array_merge($result['businesses'], $resulted['businesses']);
else
$result = $resulted ;
}
請注意,元數據是錯誤的(例如, total
),也許您也需要對其進行更新。 Yelp總是返回最具體的關鍵字,因此即使使用“餐廳”,您也將擁有“ libanese”或“ pizza”而不是“ restaurants”。 如果需要此關鍵字來顯示標記,可以將其添加到列表中(如果尚未存在)。
Yelp API會返回您正在查看的位置的距離:收集完整個集合后,您可以按遞減的距離對整個數組進行排序:
usort($result['businesses'], function ($a, $b){
return $a['distance'] - $b['distance'] ;
});
現在,您有了一個不同類別的企業列表,無論類別是什么,最接近的企業始終排在第一位。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.