有人知道怎么做吗?
我将下面的代码存储在一个变量中,并希望以不同的方式进行响应,例如:
- 按国家划分的价值总和
- 按城市划分的价值总和
- 各州价值总和
类似于:
国家a:220
国家b:80
country-c:70
国家a:220
状态b:80
state-c:70
城市a:220
城市b:80
city-c:70
stdClass Object
(
[city-a, state-a, country-a] => 100
[city-a, state-a, country-a] => 120
[city-b, state-b, country-b] => 80
[city-c, state-c, country-c] => 70
)
感谢你的帮助!
如果您不理解代码或需要其他函数的帮助,请告诉我。我还缩短了json代码。您可能会在类中实现更多的函数,并为自己创建一个nive FB统计接口。
//编辑:好的,我为您创建了一个小的API接口。它包含一个include文件、一个用法示例和两个json文件示例。请按以下方式命名文件,并将它们全部放在同一文件夹中。
index.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Your title</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<?php
//include files
include 'Stats.php';
//create an object of Stats
$stats = new Stats();
//parse any number of json files
$stats->parseJson("json1.txt");
$stats->parseJson("json2.txt");
//call the functions
print "<h1>var_dump of the data</h1>";
print '<pre>' . print_r($stats->getList(), true) . '</pre>';
print "<h1>By Country</h1>";
print "Austria:".$stats->getSumByCountry("Austria")."<br />";
print "Germany:".$stats->getSumByCountry("Germany")."<br />";
print "USA:".$stats->getSumByCountry("USA")."<br />";
print "<h1>By State</h1>";
print "Tirol:".$stats->getSumByState("Tirol")."<br />";
print "Bayern:".$stats->getSumByState("Bayern")."<br />";
print "Massachusetts:".$stats->getSumByState("Massachusetts")."<br />";
print "<h1>By City</h1>";
print "Austria:".$stats->getSumByCity("Imst")."<br />";
print "Berlin:".$stats->getSumByCity("Berlin")."<br />";
print "Los Angeles:".$stats->getSumByCity("Los Angeles")."<br />";
?>
</body>
</html>
Stats.hp:
<?php
class Stats{
private $cities;
public function addCity($city){
$this->cities[]=$city;
}
public function parseJson($jsonFile){
$jsonData = file_get_contents($jsonFile);
if($jsonData == null || $jsonData==""){
die("Error: failed to load $jsonFile");
}
$object = json_decode($jsonData);
//naviagte through the object to the data we want to have
$data = $object->data;
$temp_item = $data[0];
$temp_value = $temp_item->values;
$temp_item2 = $temp_value[0];
$value = $temp_item2->value;
//now create an entity of City for each entry and put it in the list of this class
foreach ($value as $key=> $item){
$placeArray = explode(",",$key);
$city = trim($placeArray[0]);
$state = trim($placeArray[1]);
$country = trim($placeArray[2]);
$sum = $item;
$this->addCity(new City($sum, $city, $state, $country));
}
}
public function getSumByCity($name){
$sum = 0;
foreach ($this->cities as $city){
if(strcmp($city->name,$name) == 0){
$sum += $city->sum;
}
}
return $sum;
}
public function getSumByState($state){
$sum = 0;
foreach ($this->cities as $city){
echo "";
if(strcmp($city->state,$state) == 0){
$sum += $city->sum;
}
}
return $sum;
}
public function getSumByCountry($country){
$sum = 0;
foreach ($this->cities as $city){
if(strcmp($city->country,$country) == 0){
$sum += $city->sum;
}
}
return $sum;
}
public function getList(){
return $this->cities;
}
}
class City{
public $sum, $name, $state, $country;
function __Construct($sum, $name, $state, $country){
$this->name = $name;
$this->sum = $sum;
$this->state = $state;
$this->country = $country;
}
}
?>
json1.txt
{"data":[
{"id":"SOMEID/insights/page_fans_city/lifetime",
"name":"page_fans_city",
"period":"lifetime",
"values":[
{"value":
{"Wattens, Tirol, Austria":160,
"Imst, Tirol, Austria":123,
"Zirl, Tirol, Austria":117},
"end_time":""}],
"title":"",
"description":""}],
"paging":
{"previous":"",
"next":""}
}
json2.txt:
{"data":[
{"id":"SOMEID/insights/page_fans_city/lifetime",
"name":"page_fans_city",
"period":"lifetime",
"values":[
{"value":
{"Boston, Massachusetts, USA":199,
"Los Angeles, California, USA":55},
"end_time":""}],
"title":"",
"description":""}],
"paging":
{"previous":"",
"next":""}
}