简体   繁体   中英

Search through JSON array for matching key

Im trying to search through a json array and find all keys that contain the word medals , ie...

  • medalsActivityCompleteHighestScoreWinning
  • medalsActivityCompleteVictoryBlowout
  • medalsKillHeadshot
  • medalsKillMulti2
  • medalsKillSpree1
  • medalsKillSpree2
  • medalsWinningScore
  • medalsWeaponPulseRifleKillSpree
  • medalsPaybackKill
  • medalsAvenger

ive tried...

$x = '0';
foreach ($json['Response']['data']['entries']['0'] as $extended) {
    $valueName[] = $extended['values'];

    if (strpos($valueName[$x], 'medals') !== false) {
        echo $valueName[$x];
    }

    $x++;
}

this is the array

Array
(
[Response] => Array

        [data] => Array

                [period] => 2017-07-17T21:11:58Z
                [activityDetails] => Array
                [entries] => Array

                        [0] => Array

                                [standing] => 0
                                [score] => Array
                                [player] => Array
                                [characterId] => 2305843009334005960
                                [values] => Array
                                [extended] => Array

                                        [weapons] => Array
                                        [values] => Array
                                                                                                 [totalKillDistance] => Array
                                                [kills] => Array
                                                [averageKillDistance] => Array
                                                [secondsPlayed] => Array
                                                [deaths] => Array
                                                [averageLifespan] => Array
                                                [score] => Array
                                                [averageScorePerKill] => Array
                                                [averageScorePerLife] => Array                                                    
                                                [killsOfPlayerWarlock] => Array
                                                [medalsActivityCompleteHighestScoreWinning] => Array
                                                [medalsActivityCompleteVictoryBlowout] => Array
                                                [medalsKillHeadshot] => Array
                                                [medalsKillMulti2] => Array
                                                [medalsKillSpree1] => Array
                                                [medalsKillSpree2] => Array
                                                [medalsWinningScore] => Array
                                                [medalsWeaponPulseRifleKillSpree] => Array
                                                [medalsPaybackKill] => Array
                                                [medalsAvenger] => Array
                                                [allMedalsScore] => Array
                                                [allMedalsEarned] => Array
                                                [precisionKills] => Array
                                                [weaponPrecisionKillsPulseRifle] => Array
                                                [weaponKillsGrenade] => Array
                                                [weaponKillsMelee] => Array
                                                [weaponKillsPulseRifle] => Array
                                                [weaponKillsRocketLauncher] => Array
                                                [weaponKillsSuper] => Array
                                                [weaponBestType] => Array
                                                [weaponKillsPrecisionKillsPulseRifle] => Array
                                                [allParticipantsCount] => Array
                                                [allParticipantsScore] => Array
                                                [allParticipantsTimePlayed] => Array
                                                [fireTeamId] => Array
                                                [longestKillSpree] => Array
                                                [longestSingleLife] => Array
                                                [orbsDropped] => Array
                                                [totalActivityDurationSeconds] => Array
                                                [dailyMedalsEarned] => Array
                                                [combatRating] => Array
                                                [sparksCaptured] => Array
                                                [slamDunks] => Array
                                                [dunkKills] => Array

It should do the trick:

foreach ($json['Response']['data']['entries'][0]['extended']['values'] as $key => $value) {
  if (false !== strpos($key, 'medals')) {
      echo $value.PHP_EOL;
  }
}

Alternatively, you can use array_filter :

var_dump(array_filter($json['Response']['data']['entries'][0]['extended']['values'], function ($k, $v) {
    return false !== strpos($k, 'medals');
}, ARRAY_FILTER_USE_BOTH));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM