2013-05-05 125 views
0

我在使用Xbox API的网站上工作,该API返回给定用户的游戏玩法信息。它返回的结果以JSON格式:比较json数组

{ 
"Data": { 
"Gamertag": "Major Nelson", 
"Gamerpic": "https:\/\/avatar-ssl.xboxlive.com\/avatar\/Major%20Nelson\/avatarpic-l.png", 
"GameCount": 779, 
"TotalEarnedGamerScore": 63147, 
"TotalPossibleGamerScore": 593465, 
"TotalEarnedAchievements": 3429, 
"TotalPossibleAchievements": 25498, 
"TotalPercentCompleted": 13, 
"PlayedGames": [ 
{ 
"Id": 1297287449, 
"Title": "Halo 4", 
"Url": "http:\/\/marketplace.xbox.com\/en-US\/Title\/1297287449", 
"BoxArt": "https:\/\/www.xboxleaders.com\/img\/boxart\/1297287449-small.jpg", 
"LargeBoxArt": "https:\/\/www.xboxleaders.com\/img\/boxart\/1297287449-large.jpg", 
"EarnedGamerScore": 705, 
"PossibleGamerScore": 1500, 
"EarnedAchievements": 38, 
"PossibleAchievements": 67, 
"PercentageCompleted": 56.7, 
"LastPlayed": 1363751187 
}, 
] 
}, 
"Stat": "ok", 
"In": 3.818, 
"Authed": "false", 
"AuthedAs": null 
} 

我试图创建一个数组,将检查两个不同的用户的信息,所以我可以创建一个for循环,只显示游戏标题和BoxArt两个用户都有玩过(不管完成百分比还是其他变量)。我试过以下代码:

<?php 
$gamertag = isset($_GET['tag']) ? $_GET['tag'] : null; 
$friendtag = isset($_GET['ftag']) ? $_GET['ftag'] : null; 
$gamertag2 = urlencode($gamertag); 
$friendtag2 = urlencode ($friendtag); 
// Get game information 
$games = json_decode(url_get_contents('http://www.xboxleaders.com/api/games.json?gamertag='.$gamertag2)); 
$games = $games->Data; 
$fgames = json_decode(url_get_contents('http://www.xboxleaders.com/api/games.json?gamertag='.$friendtag2)); 
$fgames = $fgames->Data; 
?> 

<?php 
$array1 = array($games->PlayedGames->Title); 
$array2 = array($fgames->PlayedGames->Title); 
$result = array_intersect($array1, $array2); 
print_r($result); 
?> 

但是,这总是返回一个空集。当我只为数组使用$ games-> PlayedGames时,它会合并两个数组并显示每个数组中的所有数据。我真的很感谢一种方法来比较两个用户数组,这将给我两个用户共同的游戏的标题和Boxart。

回答

1
function game_title ($game) { 
    return $game->Title; 
} 
$array1 = array_map('game_title', $games->PlayedGames); 
$array2 = array_map('game_title', $fgames->PlayedGames); 
$result = array_intersect($array1, $array2); 
print_r($result); 
+0

我可以肯定地调整这个做的一切,我都记在心里。谢谢您的帮助。 – Jon 2013-05-07 00:50:08

0

$games->PlayedGames->Title实际上不涉及任何内容。您需要循环访问游戏列表并逐个提取值。

喜欢的东西:

$playedGames = array(); 

foreach ($games->PlayedGames as $game) 
    checkGame($game); 
foreach ($fgames->PlayedGames as $game) 
    checkGame($game); 

foreach ($playedGames as $id => $game) 
{ 
    if ($game->playerCount == 2) 
    { 
    // whatever you like with $game->Title and $game->BoxArt 
    } 
} 

function checkGame($game) 
{ 
    global $games; 

    $id = $game->Id; 

    if (array_key_exists($id, $games)) 
    $games[$id]->playerCount++; 
    else 
    { 
    $games[$id] = array('playerCount' => 1, 
     'Title' => $game->Title, 
     'BoxArt' => $game->BoxArt 
     ); 
    } 
}