2013-03-19 61 views
0

我有一個在java中生成的JSONArray,我將它發佈到我的PHP文件中保存到文件中的一個。從那裏它被讀取,我需要根據這些數據生成一個圖表。我需要的只是將具有我不需要的值的原始JSON轉換爲簡單的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數據庫中的主自動增量,不是位於我的網絡服務器)

我想數組是[播放器,投票],所以當我回聲數組時,它將很容易被我使用的谷歌圖表工具解析。我花了最近5個小時的時間來處理這個問題,而且我一直在堅持,感謝您的幫助!

+1

[?你嘗試過什麼(http://whathaveyoutried.com)json_decode , 對於初學者? – 2013-03-19 00:16:17

+0

'<?php $ string = file_get_contents(「../ json/voting.txt」); $ json = json_decode($ string); echo $ string;我正在解析http://milkycraft.net/json/voting.txt – milkywayz 2013-03-19 00:21:48

回答

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()); 

如果我沒有理解您的問題正確,這將工作。

編輯:更新了第二代碼片段

+0

Vardump生成:array(1){[「」] => int(337)} – milkywayz 2013-03-19 00:27:40

+0

我更新了相應的代碼片段。 – 2013-03-19 01:22:43

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 
) 
+0

謝謝你在完整的json字符串之後工作,現在我只需要弄清楚如何將數組恢復爲google圖表喜歡的格式,這非常挑剔。 – milkywayz 2013-03-19 12:43:38