2015-09-26 57 views
-1

我得到了一個問題,我試圖解析一個從url動態更新的json文件。我遇到的第一個問題是,json文件僅生成對象並且沒有數組(請參閱示例1)解析動態生成的url和更多的json文件

(第Ex.I)

[{"title":"ThisIsTitle1","Team1":"ThisIsTeam1","Team2":"ThisIsTeam2","Result":"ThisIsTeam1"}{"title":"ThisIsTitle2","TeamX":"ThisIsTeamX","TeamY":"ThisIsTeamY","Result":"ThisIsTeamY"}] 

,因爲我不知道如何解析字符串沒有一個數組,所以我在網上查找了一下,發現一個方式做動態增加的數組,每個對象; (見例2例3 &)

(例2)我得到了什麼在線

$json_string = 'http://myurl/pathtojsonfile'; 
$jsondata = file_get_contents($json_string); 
$obj = json_decode($jsondata,true); 
echo "<pre>"; 
print_r($obj); 

(例3)它給了我,結果

Array 
(
    [0] => Array 
     (
      [Title] => ThisIsTitle1 
      [Team1] => ThisIsTeam1 
      [Team2] => ThisIsTeam2 
      [Result] => ThisIsTeam1 
     ) 
    [0] => Array 
     (
      [Title] => ThisIsTitle2 
      [TeamX] => ThisIsTeamX 
      [TeamY] => ThisIsTeamY 
      [Result] => ThisIsTeamY 
     ) 
) 

現在,這是我的問題:我想顯示所有的TeamX和TeamY在同一個表和插件g在其他單元格旁邊的平均結果。意味着每支球隊的勝利和失敗次數的平均值。

事情,你需要知道:

  1. 由於JSON是動態生成的,一個團隊可以是(最有可能)存在於JSON文件多的時間。這意味着當您在同一個表中顯示所有團隊時,我們需要排除所有重複。
  2. 有時結果可能是:[Result] => ThisIsTeamZ;也就是說,由於某種原因,團隊中沒有人獲勝。

我知道我從你們那裏問了很多,但我是一個noob,而且我學得很慢。如果你能幫助我,你的方式更值得歡迎。 thx很多提前,如果你需要我的任何東西不要猶豫,問。

+0

Thx爲編輯@melpomene。任何人都可以幫忙 – amarinediary

+0

你是什麼意思,「json文件只生成對象而沒有數組」?那是一個陣列。 – melpomene

+0

您對問題的描述非常模糊。我不知道你想要什麼結果。另外,您的帖子似乎沒有包含任何問題。 – melpomene

回答

0

在沒有適當的JSON樣本的情況下,我只能對您有權訪問的實際數據格式做出假設。

您需要以可用的方式重新格式化數據。例如,索引是團隊名稱的數組,其值爲包含相關值的索引爲victories,defeatsdraws的數組。

這是通過循環JSON,檢查哪個團隊贏得每個結果(如果有的話)並增加相關值(victories,defeats,draws)來完成的。

$teams = array(); 

foreach($obj as $result) { 

    // team names 
    $teamName1 = $result['team1']; 
    $teamName2 = $result['team2']; 

    // initialize team 1 array at zero if it does not exist 
    if(!isset($teams[$teamName1])) { 
     $teams[$result['team1']] = array('victories'=>0, 'defeats'=>0, 'draws'=>0); 
    } 

    // initialize team 2 array at zero if it does not exist 
    if(!isset($teams[$teamName2])) { 
     $teams[$teamName2] = array('victories'=>0, 'defeats'=>0, 'draws'=>0); 
    } 

    // team 1 wins 
    if($result['Result'] == $teamName1) { 
     $teams[$teamName1]['victories']++; 
     $teams[$teamName2]['defeats']++; 
    } 
    // team 2 wins 
    elseif($result['Result'] == $teamName2) { 
     $teams[$teamName1]['defeats']++; 
     $teams[$teamName2]['victories']++; 
    } 
    // draw 
    else { 
     $teams[$teamName1]['draws']++; 
     $teams[$teamName2]['draws']++; 
    } 
} 

然後,您將有機會獲得這樣的結構,能夠使用基本的算術:

Array 
(
    [ThisIsTeamX] => Array 
     (
      [victories] => 98 
      [defeats] => 76 
      [draws]  => 54 
     ) 
    [ThisIsTeamY] => Array 
     (
      [victories] => 12 
      [defeats] => 34 
      [draws]  => 56 
     ) 
) 

你可以得到勝利VS團隊的失敗這樣的比例:

$winRatio = $teams['ThisIsTeamX']['victories']/$teams['ThisIsTeamX']['defeats']; 

您可以獲得這樣的球隊參加的總數:

$matchesCount = array_sum($teams['ThisIsTeamX']);