2014-11-19 5 views
0

Я работаю над многомерным массивом, который показывает информацию от API RiotGames (создателей Лиги легенд). Запрос на их API искали с помощью имени пользователя и summonerID (playerID) возвращает информацию , которая выглядит следующим образом:Поиск через многомерный массив для получения информации?

Array ([summonerId] => 34943406 [playerStatSummaries] => 
Array ( 
[0] => Array ([playerStatSummaryType] => AramUnranked5x5 [wins] => 273 [modifyDate] => 1416009440000 [aggregatedStats] => Array ([totalChampionKills] => 5808 [totalTurretsKilled] => 298 [totalAssists] => 9025)) 
[1] => Array ([playerStatSummaryType] => Ascension [wins] => 2 [modifyDate] => 1415466770000 [aggregatedStats] => Array ()) 
[2] => Array ([playerStatSummaryType] => CAP5x5 [wins] => 41 [modifyDate] => 1416177610000 [aggregatedStats] => Array ([totalChampionKills] => 562 [totalMinionKills] => 9087 [totalTurretsKilled] => 79 [totalNeutralMinionsKilled] => 2371 [totalAssists] => 475)) 

и продолжается, в зависимости от того, сколько Gamemodes играл игрок. Каждый игровой режим начинается с номера [1/2/3], но для каждого пользователя он не одинаковый, в зависимости от того, какие игры они играли.

Мой вопрос заключается в том, как я могу найти в массиве, чтобы найти «Cap5x5», например, и вытащить только те статистические данные, чтобы отобразить их в чистом виде со статистикой. Проблема в том, что для моей учетной записи игровой режим «RankedSolo5x5» включен [9], но для учетной записи друга он включен [7]. Это очень неопределенный вопрос, но его трудно объяснить.

+0

будет ли CAP5x5 всегда находиться в ключе 'playerStatSummaryType'? это очень важно ... –

+0

Я не совсем понимаю, что вы подразумеваете под «ключом», вещь перед «победами» - это имя игрового режима, поэтому имя статично, но иногда оно не будет в [ 2], но, возможно, в [3], так что это будет [3] => Array ([playerStatSummaryType] => CAP5x5 ... и т. Д. –

+0

взгляните на мой ответ ...Я также генерироваться таблицу ТОЛЬКО ЕСЛИ playerStatSumarryType является CAP5x5;) –

ответ

0

Предполагая, что CAP5x5 встречается только в playerStatSummaryType

<?php 
//(...)some code you might have before this table... 

function returnTable($array, $searchFor) { 
    $content = '<table>'; 
    foreach($array['playerStatSummaries'] as $playerStat) { 
    if($playerStat['playerStatSummaryType'] == $searchFor) { 
     $content .= '<tr>'; 
      $content .= '<td>wins</td><td>' . $playerStat['wins'] . '</td>'; 
      $content .= '<td>totalChampionKills</td><td>' . $playerStat['aggregatedStats']['totalChampionKills'] . '</td>'; 
      $content .= '<td>totalMinionKills</td><td>' . $playerStat['aggregatedStats']['totalMinionKills'] . '</td>'; 
      $content .= '<td>totalTurretsKilled</td><td>' . $playerStat['aggregatedStats']['totalTurretsKilled'] . '</td>'; 
      $content .= '<td>totalNeutralMinionsKilled</td><td>' . $playerStat['aggregatedStats']['totalNeutralMinionsKilled'] . '</td>'; 
      $content .= '<td>totalAssists</td><td>' . $playerStat['aggregatedStats']['totalAssists'] . '</td>'; 

     $content .= '</tr>'; 
    } else { 
     echo 'ERROR: Stats not found for this game mode. Try a different one'; 
     continue; 
    } 
    } 

    $content .= '</table>'; 

    return $content; 
} 

echo returnTable($array, 'CAP5x5'); 
//OR... 
echo returnTable($array, 'WhatEverGameYouWant'); 
//OR... 
echo returnTable($array, $gamemode); //if $gamemode = 'CAP5x5' (for example...) 

Надеется, что это помогает! : D

+0

это здорово, но по какой-то причине, что возвращается только победы, но не остальные - ("выигрывает totalChampionKills \t \t totalMinionKills \t \t totalTurretsKilled \t \t totalNeutralMinionsKilled \t \t totalAssists \t \t totalChampionKills \t \t totalMinionKills \t \t totalTurretsKilled \t \t totalNeutralMinionsKilled \t \t \t totalAssists \t totalChampionKills \t \t \t \t totalMinionKills totalTurretsKilled \t \t \t \t totalNeutralMinionsKilled totalAssists \t \t \t \t totalChampionKills totalMinionKills \t \t \t \t totalTurretsKilled totalNeutralMinionsKilled \t \t \t \t totalAssists totalChampionKills \t \t \t \t totalMinionKills totalTurretsKilled \t \t totalNeutralMinionsK illed \t \t totalAssists « –

+0

Показывает [totalChampionKills] без [] вместо значений, которые отображаются в них –

+0

, но если я напишу« echo $ playerStat ['aggregatedStats »] [' totalChampionKills ']" перед циклом foreach нет никакой проблемы с отображением фактического «общего количества убийств» –

1

предполагая, что всегда есть только один элемент, как CAP5x5 в стат сводках массива:

function search($search_term){ 
    foreach ($result['playerStatSummaries'] as $statsItem){ 
     if($statsItem['playerStatSummaryType'] == $search_term) return $statsItem 
    } 
    return false; 
} 

$myStats = search('CAP5x5'); 
0
$arr = get_riotgames_array(); // pseudocall 

array_filter($arr, function($elem) { // will filter by checking type 
    return array_reduce($elem['playerStatSummaries'], function($memo, $el) { 
    // whether type is OK, carry true 
    return $memo = $memo || $el['playerStatSummaryType'] === 'CAP5x5' 
    }, false) 
}); 

Надежда это hepls.

Смежные вопросы