首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP前端迭代JSON数据输出

问PHP前端迭代JSON数据输出
EN

Stack Overflow用户
提问于 2015-12-23 02:08:50
回答 1查看 60关注 0票数 0

好的,所以我尝试将一些JSON数据输出到PHP页面中。到目前为止,我的PHP代码如下所示:

代码语言:javascript
复制
<?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提要,但这是饮料的一个片段,它的大小/价格不同:

代码语言:javascript
复制
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 10盎司:$4 16盎司:$6 32盎司:$11 64盎司:$18

等等..。

我想出了让它在下面工作的代码:

代码语言:javascript
复制
foreach($beverage['MenuItemProductDetail']['Prices'] as $price) {
    echo '<p>'.$price['DisplayName'].': $'.$price['Price'].'</p>';
}

但是,我不知道如何将代码与html输出放在一起:

代码语言:javascript
复制
    $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++;     
}

?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-23 03:02:58

试试这件衣服的尺寸。当然,您可以随意使用标记并根据自己的喜好重构:

新的项目如下:

第59-64行:

代码语言:javascript
复制
$bottlePrices = $beverage['MenuItemProductDetail']['Prices'];

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

第111-112行:

代码语言:javascript
复制
//Prices and Sizes
 '<div class="prices-sizes">'.$pricesSizesHtml.'</div>'.

样本输出:

代码语言:javascript
复制
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

代码:

代码语言:javascript
复制
<?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++;     
}

?>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34427521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档