我正在解析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
答案 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);