variabelen maken van een reeks gegevens
Code (php)
1
2
3
2
3
{"champions":[{"id":266,"name":"Aatrox","active":true,"attackRank":8,"defenseRank":4,"magicRank":3,"difficultyRank":6,"botEnabled":false,"freeToPlay":false,"botMmEnabled":false,"rankedPlayEnabled":true},
{"id":103,"name":"Ahri","active":true,"attackRank":3,"defenseRank":4,"magicRank":8,"difficultyRank":8,"botEnabled":false,"freeToPlay":false,"botMmEnabled":false,"rankedPlayEnabled":true},
{"id":84,"name":"Akali","active":true,"attackRank":5,"defenseRank":3,"magicRank":8,"difficultyRank":6,"botEnabled":false,"freeToPlay":false,"botMmEnabled":false,"rankedPlayEnabled":true}]}
{"id":103,"name":"Ahri","active":true,"attackRank":3,"defenseRank":4,"magicRank":8,"difficultyRank":8,"botEnabled":false,"freeToPlay":false,"botMmEnabled":false,"rankedPlayEnabled":true},
{"id":84,"name":"Akali","active":true,"attackRank":5,"defenseRank":3,"magicRank":8,"difficultyRank":6,"botEnabled":false,"freeToPlay":false,"botMmEnabled":false,"rankedPlayEnabled":true}]}
Hoe kan ik hier nu bijvoorbeeld de 'attackRank' van 'Aatrox' in een variable plaatsen?
P.S. Dit komt van de league of legends api
Gewijzigd op 14/12/2013 21:35:17 door Louis Deconinck
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
// $a heeft de json in zich
$a = '{"champions":[{"id":266,"name":"Aatrox","active":true,"attackRank":8,"defenseRank":4,"magicRank":3,"difficultyRank":6,"botEnabled":false,"freeToPlay":false,"botMmEnabled":false,"rankedPlayEnabled":true},
{"id":103,"name":"Ahri","active":true,"attackRank":3,"defenseRank":4,"magicRank":8,"difficultyRank":8,"botEnabled":false,"freeToPlay":false,"botMmEnabled":false,"rankedPlayEnabled":true},
{"id":84,"name":"Akali","active":true,"attackRank":5,"defenseRank":3,"magicRank":8,"difficultyRank":6,"botEnabled":false,"freeToPlay":false,"botMmEnabled":false,"rankedPlayEnabled":true}]}';
// zet de json om naar een PHP object
$obj = json_decode($a);
// dump het complete object op het scherm om te lezen hoe het is opgebouwd
echo '<pre>';
print_r($obj);
echo '</pre>';
//Hoe kan ik hier nu bijvoorbeeld de 'attackRank' van 'Aatrox' in een variable plaatsen?
// loop door de champions array
foreach($obj->champions as $champion)
{
// laat van ieder object in de champions array zien wie welke attackRank heeft
echo $champion->name . ' heeft een attackRank van ' .$champion->attackRank . '<br>';
}
?>
// $a heeft de json in zich
$a = '{"champions":[{"id":266,"name":"Aatrox","active":true,"attackRank":8,"defenseRank":4,"magicRank":3,"difficultyRank":6,"botEnabled":false,"freeToPlay":false,"botMmEnabled":false,"rankedPlayEnabled":true},
{"id":103,"name":"Ahri","active":true,"attackRank":3,"defenseRank":4,"magicRank":8,"difficultyRank":8,"botEnabled":false,"freeToPlay":false,"botMmEnabled":false,"rankedPlayEnabled":true},
{"id":84,"name":"Akali","active":true,"attackRank":5,"defenseRank":3,"magicRank":8,"difficultyRank":6,"botEnabled":false,"freeToPlay":false,"botMmEnabled":false,"rankedPlayEnabled":true}]}';
// zet de json om naar een PHP object
$obj = json_decode($a);
// dump het complete object op het scherm om te lezen hoe het is opgebouwd
echo '<pre>';
print_r($obj);
echo '</pre>';
//Hoe kan ik hier nu bijvoorbeeld de 'attackRank' van 'Aatrox' in een variable plaatsen?
// loop door de champions array
foreach($obj->champions as $champion)
{
// laat van ieder object in de champions array zien wie welke attackRank heeft
echo $champion->name . ' heeft een attackRank van ' .$champion->attackRank . '<br>';
}
?>
Maar dan krijg ik deze error: Fatal error: Cannot use string offset as an array in ..., hoe kan ik dit oplossen?
-EDIT-
Ik heb het probleem gevonden er werden namelijk objects en arrays door elkaar gebruikt, dit was de oplossing:
Gewijzigd op 15/12/2013 10:16:48 door Louis Deconinck
json_decode (altijd een goed idee om daar eerst te kijken).
En dan vooral de tweede (optionele) parameter:
Als je geen waarde meegeeft dan zal json_decode de json string omzetten in een object. Dat is wat Frank heeft gedaan en dan zal je de properties dus in object notatie moeten aanroepen (wat Frank ook heeft gedaan). Jij probeert het nu als een array aan te roepen. Dat kan alleen als je json_decode het dus naar een array laat omzetten. Daarvoor moet je dus de tweede parameter op true zetten.
Check de documentatie van En dan vooral de tweede (optionele) parameter:
Quote:
assoc
When TRUE, returned objects will be converted into associative arrays.
When TRUE, returned objects will be converted into associative arrays.
Als je geen waarde meegeeft dan zal json_decode de json string omzetten in een object. Dat is wat Frank heeft gedaan en dan zal je de properties dus in object notatie moeten aanroepen (wat Frank ook heeft gedaan). Jij probeert het nu als een array aan te roepen. Dat kan alleen als je json_decode het dus naar een array laat omzetten. Daarvoor moet je dus de tweede parameter op true zetten.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$obj1 = json_decode('http://ddragon.leagueoflegends.com/cdn/3.15.5/data/en_US/champion/Aatrox.json', true);
$championname = $obj1[data][aatrox][name];
echo $championname;
?>
$obj1 = json_decode('http://ddragon.leagueoflegends.com/cdn/3.15.5/data/en_US/champion/Aatrox.json', true);
$championname = $obj1[data][aatrox][name];
echo $championname;
?>
2) array keys zijn strings, daar horen dus quotes omheen
Dus hoe zou ik 1) kunnen oplossen?
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
// $a heeft de json in zich
$a = file_get_contents('http://ddragon.leagueoflegends.com/cdn/3.15.5/data/en_US/champion/Aatrox.json');
// zet de json om naar een PHP object
$obj = json_decode($a, true);
?>
// $a heeft de json in zich
$a = file_get_contents('http://ddragon.leagueoflegends.com/cdn/3.15.5/data/en_US/champion/Aatrox.json');
// zet de json om naar een PHP object
$obj = json_decode($a, true);
?>