2015-12-23 120 views
0

好吧,所以我試圖把一些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++;  
} 

?> 
+4

您需要爲價格添加額外的foreach循環,並使用該循環代替特定的索引。 '''foreach($ beverage ['MenuItemProductDetail'] ['Prices'] as $ price)''' – arma

回答

1

嘗試此尺寸。你可以玩的過程中的標記和重構自己的喜好:

新線分別是:

線59-64:

$bottlePrices = $beverage['MenuItemProductDetail']['Prices']; 

$pricesSizesHtml = ""; 
foreach($bottlePrices as $prices){ 
    $pricesSizesHtml .= $prices['DisplayName'] . ": $" . $prices['Price'] . "<br>"; 
} 

和線111-112:

//Prices and Sizes 
'<div class="prices-sizes">'.$pricesSizesHtml.'</div>'. 

樣本輸出:

Ex Novo 
Eliot IPA 
IPA - Hops (Galaxy, Simcoe, Centennial & Southern Cross) 
ABV: 6.6% | IBU: 65 
BeerAdvocate.com | RateBeer.com 
70% 
Taster: $2 
10oz: $4 
16oz: $6 
32oz: $11 
64oz: $18 

代碼:

<?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']; 
     $bottlePrices = $beverage['MenuItemProductDetail']['Prices']; 

     $pricesSizesHtml = ""; 
     foreach($bottlePrices as $prices){ 
      $pricesSizesHtml .= $prices['DisplayName'] . ": $" . $prices['Price'] . "<br>"; 
     } 

     $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>'. 

     //Prices and Sizes 
     '<div class="prices-sizes">'.$pricesSizesHtml.'</div>'. 

     ($t == $countnumrows ? '</div><div id="shim"></div><div id="datafieldcontainer">' : '');  

echo $html; 
$t++;  
} 

?> 
+0

這非常有幫助,並且完全符合我的要求,它也非常有意義!有趣的是我現在正在考慮你自己的代碼,「這很容易,我忽略了它!」。 – DigitalSky