0

私は現在、いくつかのphpとJSONをいじっています。私はPHPのビットをJSONについてほとんど何も知りませんが、現在必要な場所の約半分に到達することができました。コードのこのセクションがあります。

<?php
$json = file_get_contents('http://eu.battle.net/api/wow/character/Ragnaros/Smoosher?fields=progression');
$data = json_decode($json, true);

foreach ($data['progression']['raids'] as $raid) {
    echo "Raid: ", $raid['name'];
    echo " Normal: ", $raid['normal'];
    echo " Heroic: ", $raid['heroic'];
    echo " id: ", $raid['id'];
    echo " Boss's: ", $raid['bosses']['name'];
    ?>
    <p>
    <?php
};

foreach ($data['progression']['raids']['bosses'] as $boss) {
    echo " Boss Name: ", $boss['name'];
}

print_r($boss);
#echo $data->name;
?>

これで、最初の foreach は正常に動作し、データをページに正常に引き出すことに何の問題もありませんが、私が出力していたものの中に別の (配列?) があるように見えたので、最初に試しました

echo " Boss's: ", $raid['bosses']['name'];

これは上司の単語だけを出力し、配列内からは何も出力しないので、おそらく別の foreach ステートメントが必要だと思い、それを引き出し始めました。ただしこの部分

foreach ($data['progression']['raids']['bosses'] as $boss) {
    echo " Boss Name: ", $boss['name'];
}

エラーを出す

Warning: Invalid argument supplied for foreach() in xxxxxx/xx/xxxxx/wow/test.php on line 22

そして、私は何が間違っているのかわかりません:(どんな助けも素晴らしいでしょう、私が引っ張っているjsonは

http://eu.battle.net/api/wow/character/Ragnaros/Smoosher?fields=progression
4

3 に答える 3

2

ここでの問題は$data['progression']['raids']['bosses']、配列ではないことです。

$data['progression']['raids']は配列の配列であり、これらの配列のそれぞれにbossesキーがあるため、データは次のようになります。

$data['progression']['raids'][0]['bosses'][0]-ただではなく、そこに注意してください$data['progression']['raids']['bosses']

bosses前のループ内にループをネストする必要があります。

<?php
$json = file_get_contents('http://eu.battle.net/api/wow/character/Ragnaros/Smoosher?fields=progression');
$data = json_decode($json, true);

foreach ($data['progression']['raids'] as $raid)
{
echo "Raid: ", $raid['name'];

echo " Normal: ", $raid['normal'];

echo " Heroic: ", $raid['heroic'];

echo " id: ", $raid['id'];

foreach ($raid['bosses'] as $boss)
{
  echo " Boss Name: ", $boss['name'];
}
?>
<p>
<?php
};
于 2013-07-16T11:03:29.390 に答える
1
$data['progression']['raids']

この変数は配列です。この配列で foreach を使用できます。

foreach($data['progression']['raids'] as $raid) {
    forach($raid['bosses'] as $boss) {
        //here is your boss
    }
}
于 2013-07-16T11:04:55.207 に答える
1

2 番目の foreach については、次のように記述する必要があります:- $data['progression']['raids'] はその中に配列を保持し、['bosses'] は $data['progression']['raids' のメンバーとして配列要素を持ちます。 ]。

foreach ($data['progression']['raids'] as $boss)
 foreach($boss['bosses'] as $boss1) 
 {
  echo " Boss Name: ", $boss1['name'];
  echo '<br>';
 }
于 2013-07-16T11:13:21.220 に答える