2016-09-23 117 views
0

我有一個查詢api並將響應輸出爲數組的函數。我可以運行這個函數一次,然後我可以回顯數組輸出。具有不同參數的PHP循環函數

但對我來說問題是,我可以調用這個函數一次並輸出。但我想循環這些函數參數並將其稱爲多個用戶名。例如:

<?php 
    require("./include/function.php"); 

    $Player=fetchCharacterDescriptions("Senaxx", "2"); 
      echo "<tr>"; 
      echo "<th class=\"col-md-3\">" . $Player[0]['username'] . "</th>"; 
      foreach ($Player as $var) 
       { 
       echo "<th class=\"col-md-3\">",$var['class']," ",$var['light'],"</th>"; 
       } 
      echo "</tr>"; 
    echo "</thead>"; 
    echo "</table>"; 
?> 

而且這一呼籲是在function.php功能fetchCharacterDescriptions是:

<?php 

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 

$hash = array(
     '3159615086' => 'Glimmer', 
     '1415355184' => 'Crucible Marks', 
     '1415355173' => 'Vanguard Marks', 
     '898834093' => 'Exo', 
     '3887404748' => 'Human', 
     '2803282938' => 'Awoken', 
     '3111576190' => 'Male', 
     '2204441813' => 'Female', 
     '671679327' => 'Hunter', 
     '3655393761' => 'Titan', 
     '2271682572' => 'Warlock', 
     '3871980777' => 'New Monarchy', 
     '529303302' => 'Cryptarch', 
     '2161005788' => 'Iron Banner', 
     '452808717' => 'Queen', 
     '3233510749' => 'Vanguard', 
     '1357277120' => 'Crucible', 
     '2778795080' => 'Dead Orbit', 
     '1424722124' => 'Future War Cult', 
     '2033897742' => 'Weekly Vanguard Marks', 
     '2033897755' => 'Weekly Crucible Marks', 
    ); 

function translate($x) 
{ 
    global $hash; 
    return array_key_exists($x, $hash) ? $hash[$x] : null; 
} 


//BungieURL 
function callBungie($uri) 
    { 
    $apiKey = '145c4aff30864167ac4548c02c050679'; 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_URL, $uri); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
     'X-API-Key: ' . $apiKey 
    )); 
    if (!$result = json_decode(curl_exec($ch) , true)) 
     { 
     $result = false; 
     } 

    curl_close($ch); 
    return $result; 
    } 

//Request Player  
function fetchPlayer($username, $platform) 
    { 
    $result = false; 
    $uri = 'http://www.bungie.net/Platform/Destiny/SearchDestinyPlayer/' . $platform . '/' . $username; 
    $json = callBungie($uri); 
    if (isset($json['Response'][0]['membershipId'])) 
     { 
     $result = array(
      'membershipId' => $json['Response'][0]['membershipId'], 
      'membershipType' => $platform 
     ); 
     } 
    return $result; 
    } 
//Request characters 
function fetchCharacters($username, $platform) 
    { 
     $result = array(); 

     if($player = fetchPlayer($username, $platform)) { 
      $uri = 'http://bungie.net/Platform/Destiny/'.$player['membershipType'].'/Account/'.$player['membershipId'].'?ignorecase=true'; 

      if($json = callBungie($uri)) { 
       foreach ($json['Response']['data']['characters'] as $character) { 
        $result[] = $character; 
       } 
      } 
     } 
     return $result; 
    } 

//Request character descriptions 
function fetchCharacterDescriptions($username, $platform) 
    { 
     $character_descriptions = array(); 
     if($characters = fetchCharacters($username, $platform)) { 
      foreach ($characters as $character) { 

       $class = translate($character['characterBase']['classHash']); 
       $emblem = $character['emblemPath']; 
       $backgroundpath = $character['emblemPath']; 
       $level = $character['characterLevel']; 
       $character_id = $character['characterBase']['characterId']; 
       $light = $character['characterBase']['stats']['STAT_LIGHT']['value']; 
       $username = $username; 

       $character_descriptions[] = array(
        'class'=> $class, 
        'emblem'=> $emblem, 
        'backgroundpath'=>$backgroundpath, 
        'character_id' => $character_id, 
        'characterlevel' => $level, 
        'light' => $light, 
        'username' => $username 

       ); 
      } 

     return $character_descriptions; 
     } 
     return false; 
    } 

?> 

所以我的函數調用:fetchCharacterDescriptions("Senaxx", "2");,我想更多的玩家加入到這個(從數組或其他)所以我可以請求多個用戶名的統計信息。

回答

0

你只需循環玩家一個執行fetchCharacterDescriptions爲他們每個人。

$players = array(
    "Senaxx" => "2", 
    "SomeoneElse" => "2", 
); 

foreach ($players as $playerName => $platformId) { 
    $Player = fetchCharacterDescriptions($playerName, $platformId); 
    // do your other stuff 
} 

請記住,因爲fetchCharacterDescriptions每次調用()執行2個捲曲請求您的網頁將加載veeery緩慢。此外 - 如果API關閉,您的網站有效地(至少是空白)也是如此。

你可能最好提前獲取數據(在某些intervalls)並將其存儲到數據庫/ csv文件或其他東西。

+0

感謝您花時間回答我的問題。我稍後再試 – Senaxx