我在java中生成了一个JSONArray,并将其发布到我的一个PHP文件中,并将其保存到文件中。从那里它被读取,我需要根据这些数据生成图表。我只需要将我不需要的原始JSON转换为简单的php数组。
[{"id":1,"timestamp":"1363135091","reward":1200,"player":"Orangeguy24","address":"108.28.239.167","service":"MC-Index"},{"id":2,"timestamp":"1363135091","reward":1200,"player":"Orangeguy24","address":"108.28.239.167","service":"MC-Index"}]
是我的JSON数组中的2个元素的示例。我需要的是将这些值相应地过滤到数组中。
例如,获取“玩家”有多少票,我需要加上JSONArray中有多少元素,因为1个元素是1票(id是我的mysql DB中的主要自动增量,不是位于在我的网络服务器上)
我希望数组是[播放器,投票]所以当我回显数组时,它将很容易被我正在使用的谷歌图表工具解析。我花了最后5个小时来处理这个问题而且我已经被卡住了,感谢您的帮助!
答案 0 :(得分:1)
要将JSON解码为php数组,您可以执行以下操作:
$json_array = json_decode($raw_json);
然后,从阵列中获得每个玩家的投票数:
$player_votes = array_reduce($json_array,
function($v, $item) {
if(!array_key_exists($item->player, $v))
$v[$item->player] = 1;
else
$v[$item->player] = 1 + $v[$item->player];
return $v;
}, array());
如果我理解你的问题,这将有效。
编辑:更新了第二个代码段
答案 1 :(得分:0)
试试这个:
$str = '[{"id":1,"timestamp":"1363135091","reward":1200,"player":"Orangeguy24","address":"108.28.239.167","service":"MC-Index"},{"id":2,"timestamp":"1363135091","reward":1200,"player":"Orangeguy24","address":"108.28.239.167","service":"MC-Index"}]';
$res = array();
foreach(json_decode($str,true) as $val){
if(array_key_exists($val['player'],$res)){
$res[$val['player']] = $res[$val['player']]+1;
}
else{
$res[$val['player']] = 1;
}
}
echo "<pre>";
print_r($res);
输出:
Array
(
[Orangeguy24] => 2
)