好吧,所以我試圖把一些JSON數據輸出到PHP頁面。我的PHP代碼如下所示到目前爲止:PHP foreach迭代JSON數據輸出
<?php
$string =
$string =
file_get_contents("https://service.digitalpour.com/BeerDashboard/api/v2/MenuItems/53716a8dfb890c0d68677264/1/Tap?apiKey=53926cc7fb890c0528735cde");
$json_taps = json_decode($string, true);
$t=1;
echo '<div id="taplist-container">';
foreach ($json_taps as $beverage) {
$item_name = $beverage['MenuItemDisplayDetail']['DisplayName'];
$producer_name = $beverage['MenuItemProductDetail']['FullProducerList'];
$beverage_name = $beverage['MenuItemProductDetail']['BeverageNameWithVintage'];
$beverage_style = $beverage['MenuItemProductDetail']['FullStyleName'];
$beverage_color = $beverage['MenuItemProductDetail']['Beverage']['StyleColor'];
$year = $beverage['MenuItemProductDetail']['Year'];
$beverage_abv = $beverage['MenuItemProductDetail']['Beverage']['Abv'];
$beverage_ibu = $beverage['MenuItemProductDetail']['Beverage']['Ibu'];
$beverage_type = $beverage['MenuItemProductDetail']['BeverageType'];
$beer_advocate = $beverage['MenuItemProductDetail']['Beverage']['BeerAdvocateUrl'];
$rate_beer = $beverage['MenuItemProductDetail']['Beverage']['RateBeerUrl'];
$price = $beverage['MenuItemProductDetail']['Prices'][0]['Price'];
$size = $beverage['MenuItemProductDetail']['Prices'][0]['DisplayName'];
$producer_location = "";
$producer_url = "";
switch($beverage_type) {
case "Beer":
$producer_location = $beverage['MenuItemProductDetail']['Beverage']['Brewery']['Location'];
$producer_url = $beverage['MenuItemProductDetail']['Beverage']['Brewery']['BreweryUrl'];
break;
case "Cider":
$producer_location = $beverage['MenuItemProductDetail']['Beverage']['Cidery']['Location'];
$producer_url = $beverage['MenuItemProductDetail']['Beverage']['Cidery']['CideryUrl'];
break;
case "Mead":
$producer_location = $beverage['MenuItemProductDetail']['Beverage']['Meadery']['Location'];
$producer_url = $beverage['MenuItemProductDetail']['Beverage']['Meadery']['MeaderyUrl'];
break;
case "Wine":
$producer_location = $beverage['MenuItemProductDetail']['Beverage']['Winery']['Location'];
$producer_url = $beverage['MenuItemProductDetail']['Beverage']['Winery']['WineryUrl'];
break;
case "Kombucha":
$producer_location = $beverage['MenuItemProductDetail']['Beverage']['KombuchaMaker']['Location'];
$producer_url = $beverage['MenuItemProductDetail']['Beverage']['KombuchaMaker']['Url'];
break;
case "Soft Drink":
$producer_location = $beverage['MenuItemProductDetail']['Beverage']['SoftDrinkMaker']['Location'];
$producer_url = $beverage['MenuItemProductDetail']['Beverage']['SoftDrinkMaker']['Url'];
break;
}
$date_put_on = $beverage['DatePutOn'];
$bottle_size = $beverage['MenuItemProductDetail']['Prices'][0]['Size'];
$bottle_price = $beverage['MenuItemProductDetail']['Prices'][0]['Price'];
$beverage_ps = $beverage['MenuItemProductDetail']['Prices'][0]['DisplayName'];
$in_bottles = $beverage['MenuItemProductDetail']['AvailableInBottles'];
$keg_size = $beverage['MenuItemProductDetail']['KegSize'];
$oz_remaining = $beverage['MenuItemProductDetail']['EstimatedOzLeft'];
$scale = 1.0; //
//calculating percentage of keg remaining
// Get Percentage out of 100
if (!empty($keg_size)) { $percent = $oz_remaining/$keg_size; }
else { $percent = 0; }
// Limit to 100 percent (if more than the max is allowed)
if ($percent > 1) { $percent = 1; }
if ($percent < 0) { $percent = .005; }
$percent_remaining = number_format($percent*100, 0);
if ($percent_remaining < 1) {$percent_remaining = "< 1";}
//determine percent Left color
// |-----------Red ---------------------------| |-------Green--------------------| |Blue|
$percent_left_color = (max(0,min(255,511 * (1-$percent))) * 65536) + (max(0,min(255,511 * $percent)) * 256) + 40;
$html =
'<div class="keg-info">'.
'<div class="boxfielddata" title="'.$percent_remaining.'% remaining" >'.
'<div class="brewery">'.(!empty($producer_url) ? '<a href="http://'.$producer_url.'" target="_blank">' : '</a>').$producer_name.'</a> '.'</div>'.
'<div class="beverage-name">'.$beverage_name.'</div>'.
'<div class="beverage-type">'.$beverage_style.'</div>'.
'<div class="abv">ABV: '.$beverage_abv.'% | IBU: '.$beverage_ibu.'</div>'.
'<div class="reviews">
<a href="'.$beer_advocate.'" target="_blank" rel="nofollow">BeerAdvocate.com</a> | <a href="'.$rate_beer.'" target="_blank" rel="nofollow">RateBeer.com</a>
</div>'.
'<div class="beverage-type">'.$displaySize.'</div>'.
'<span>'.($beverage_ps == '12oz' ? $beverage_ps : '').'</span>'.
'<span style="position:relative;">'.($in_bottles == TRUE
? '<a href="/dev/?page_id=7&so=brewery">Available in bottles!</a>' :
'').'</span>'.
//PERCENTAGE AND COLOR
'<div class="percent-remaining" style="width:'.round(100 * $scale).'px;">'.
'<div style="width:'.round(max($percent*100,5) * $scale).'px; height: 20px; background-color: #'.substr("000000".dechex($percent_left_color),-6).';"></div>'.
'</div>'.
'<div class="percent-number">'.$percent_remaining.'%</div>'.
'</div></div>'.
($t == $countnumrows ? '</div><div id="shim"></div><div id="datafieldcontainer">' : '');
echo $html;
$t++;
}
?>
從這裏輸出的顯示效果太棒了,但是飲料具有多種尺寸和價格根據大小。例如,你可以使用上面的代碼的鏈接來訪問我的JSON飼料,但這是飲料之一的一個片段,它是不同的尺寸/價格:
Year: 2015,
Attributes: [ ],
HasVintage: false,
Prices: [
{
Size: 5,
Price: 2,
DisplayName: "Taster",
DisplaySize: 5.5,
UPCCode: null,
Glassware: "Nonic (Small)",
DisplayOnMenu: false
},
{
Size: 9.5,
Price: 4,
DisplayName: "10oz",
DisplaySize: 10,
UPCCode: null,
Glassware: "Nonic (Small)",
DisplayOnMenu: true
},
{
Size: 15.5,
Price: 6,
DisplayName: "16oz",
DisplaySize: 16,
UPCCode: null,
Glassware: "Nonic",
DisplayOnMenu: true
},
{
Size: 35.2,
Price: 11,
DisplayName: "32oz",
DisplaySize: 32,
UPCCode: null,
Glassware: "Growler",
DisplayOnMenu: false
},
{
Size: 70.4,
Price: 18,
DisplayName: "64oz",
DisplaySize: 64,
UPCCode: null,
Glassware: "Growler",
DisplayOnMenu: false
}
],
EventPrices: null,
EventPricesActive: false,
EventId: null,
EventName: null,
DateAdded: "2015-12-09T18:57:30.517Z",
ProductFinished: false,
BeverageNameWithVintage: "Eliot IPA",
FullBeverageName: "Ex Novo Eliot IPA",
FullProducerList: "Ex Novo",
FullStyleName: "IPA - Hops (Galaxy, Simcoe, Centennial & Southern Cross)",
EventItem: false,
ReplaceableItem: false
},
Active: true,
DatePutOn: "2015-12-15T00:50:51.709Z",
DatePulledOff: null
},
所以我試圖做的是數字瞭解我可以如何輸出不同尺寸和價格以及我輸出的其他數據(請參閱上面的PHP代碼),並顯示各種可用的尺寸和價格,如下所示:
品酒師:$ 2 10oz:$ 4 16oz:$ 6 32oz:$ 11 64oz:$ 18
等等...
我想通了代碼,使其工作如下:
foreach($beverage['MenuItemProductDetail']['Prices'] as $price) {
echo '<p>'.$price['DisplayName'].': $'.$price['Price'].'</p>';
}
但我不能確定如何將這些代碼嵌入與下面的HTML輸出:
$percent_left_color = (max(0,min(255,511 * (1-$percent))) * 65536) + (max(0,min(255,511 * $percent)) * 256) + 40;
$html =
'<div class="keg-info">'.
'<div class="boxfielddata" title="'.$percent_remaining.'% remaining" >'.
'<div class="brewery">'.(!empty($producer_url) ? '<a href="http://'.$producer_url.'" target="_blank">' : '</a>').$producer_name.'</a> '.'</div>'.
'<div class="beverage-name">'.$beverage_name.'</div>'.
'<div class="beverage-type">'.$beverage_style.'</div>'.
'<div class="abv">ABV: '.$beverage_abv.'% | IBU: '.$beverage_ibu.'</div>'.
'<div class="reviews">
<a href="'.$beer_advocate.'" target="_blank" rel="nofollow">BeerAdvocate.com</a> | <a href="'.$rate_beer.'" target="_blank" rel="nofollow">RateBeer.com</a>
</div>'.
'<div class="beverage-type">'.$displaySize.'</div>'.
'<span>'.($beverage_ps == '12oz' ? $beverage_ps : '').'</span>'.
'<span style="position:relative;">'.($in_bottles == TRUE
? '<a href="/dev/?page_id=7&so=brewery">Available in bottles!</a>' :
'').'</span>'.
//PERCENTAGE AND COLOR
'<div class="percent-remaining" style="width:'.round(100 * $scale).'px;">'.
'<div style="width:'.round(max($percent*100,5) * $scale).'px; height: 20px; background-color: #'.substr("000000".dechex($percent_left_color),-6).';"></div>'.
'</div>'.
'<div class="percent-number">'.$percent_remaining.'%</div>'.
'</div></div>'.
($t == $countnumrows ? '</div><div id="shim"></div><div id="datafieldcontainer">' : '');
echo $html;
$t++;
}
?>
您需要爲價格添加額外的foreach循環,並使用該循環代替特定的索引。 '''foreach($ beverage ['MenuItemProductDetail'] ['Prices'] as $ price)''' – arma