使用PHP将JSON数据分发到不同的HTML元素中

时间:2018-01-27 02:38:11

标签: php json

我正在解析JSON对象并使用foreach循环来输出数据。

function do_api_call() {
  $place_id = get_theme_mod('place_id_setting_field');

  $url = "https://maps.googleapis.com/maps/api/place/details/json?placeid=" . $place_id . "&key=myapikey";
  $data = file_get_contents($url);

  $rev = json_decode($data, true);
  $reviews = $rev["result"]["reviews"];
  foreach($reviews as $review) {
    $review_snippet = $review["text"];
    echo $review_snippet . '<br>';
  }
}

当我在一个HTML元素中调用它时,这可以正常工作:

<?php echo do_api_call() ?>

缺点是我从这个循环中得到了5条评论,我需要每个评论在一个名为reviews.php的不同文件中转到他们自己的html元素,这个文件包含5个带有{的唯一引导卡{1}}需要进行独特审核,因此我需要在每张卡片中输出唯一的评论。

像这样:

div

1 个答案:

答案 0 :(得分:1)

您可以使用$rev["result"]["reviews"][0](第一个)$rev["result"]["reviews"][1](第二个)等访问直接审核。因此您可以将哪个审核作为函数arg传递。

但是,为了在每次调用函数时减少重新加载外部源,您可能希望在函数外部执行数据加载:

$place_id = get_theme_mod('place_id_setting_field');
$url     = 'https://maps.googleapis.com/maps/api/place/details/json?placeid='. 
            $place_id .'&key=myapikey';
$data    = file_get_contents($url);
$rev     = json_decode($data,true);
$reviews = $rev['result']['reviews'];// this is now setup and ready to use

然后使用global(php 5.3 +)设置匿名函数:

$get_review = function ($r) use (&$reviews) {
    if (isset($reviews[$r])) {
        return '<div>'. $reviews[$r]['text'] .'<div>';
    }
    return '';// no review to return
};

然后在你想要开始输出它们的html中,你可以这样调用它(注意$是故意的,并且匿名函数分配给变量):

<body>
    blah blah other stuff
    <?php echo $get_review(0);?>
    more blah
    <?php echo $get_review(1);?>
</body>

或者,如果您需要循环播放有多少评论:

<body>
    <?php for($r=0;$r < count($reviews);$r++) { echo $get_review($r); } ?>
</body>

如果您害怕使用我上面的匿名功能,您可以将其调整为:

function get_review ($r,&$reviews) {
    if (isset($reviews[$r])) {
        return '<div>'. $reviews[$r]['text'] .'<div>';
    }
    return '';// no review to return
}

// call it as thus
echo get_review(0,$reviews);
echo get_review(1,$reviews);
// etc

课程方法:

当然你也可以把它变成一个小类对象,你首先load_api,然后get_review作为类的方法:

class Reviews {
    public static $reviews;

    public static function load_api() {
        $place_id = get_theme_mod('place_id_setting_field');
        $url     = 'https://maps.googleapis.com/maps/api/place/details/json?placeid='. 
                    $place_id .'&key=myapikey';
        $data    = file_get_contents($url);
        $rev     = json_decode($data,true);
        self::$reviews = $rev['result']['reviews'];// this is now setup and ready to use
    }
    public static function get_review($r) {
        if (isset(self::$reviews[$r])) {
            return '<div>'. self::$reviews[$r]['text'] .'<div>';
        }
        return '';// no review to return
    }
}

// to initialize
Reviews::load_api();

// to call and output
echo Reviews::get_review(0);