如何将JSON数组过滤到PHP数组中

时间:2013-03-19 00:13:45

标签: php arrays json filter

我在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个小时来处理这个问题而且我已经被卡住了,感谢您的帮助!

2 个答案:

答案 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
)