2017-01-25 13 views
0

PHPを使用してJSONファイルから読み込もうとしました。しかし、私は今立ち往生しています。PHPと複数のforeachステートメントによるJSONファイルからの読み込み

これは私のJSONファイルです:

Array 
(
    [date] => 25-1-2017 
    [leagues] => Array 
     (
      [0] => Array 
       (
        [league_id] => 0 
        [league_name] => كأس امم افريقيا 
        [league_logo] => http://3.bp.blogspot.com/-4iampWUCLto/VmldL2XTz7I/AAAAAAAAD0I/eZFfzSxRbnE/s60/africa.png 
        [league_matches] => Array 
         (
          [0] => Array 
           (
            [match_id] => 1 
            [team1logo] => http://2.bp.blogspot.com/-mycTzHXuzJA/Ugbb-UG_3JI/AAAAAAAAEv0/_mzaSHnRedE/s60/egypt+(4).png 
            [team2logo] => http://1.bp.blogspot.com/-kYrkU4jahZY/UgbeVpHf8RI/AAAAAAAAFIQ/TBgM5fvVW14/s60/ghana+(3).png 
            [match_time] => 19:00 
            [channels_id] => Array 
             (
              [0] => 18 
             ) 

            [team1] => مصر 
            [team2] => غانا 
           ) 

          [1] => Array 
           (
            [match_id] => 2 
            [team1logo] => http://3.bp.blogspot.com/-_y1MazEn-vg/UgbeoIWUpII/AAAAAAAAFPI/JTRGGpG3GiQ/s60/mali+(4).png 
            [team2logo] => http://2.bp.blogspot.com/-GTxKONxvKy4/Ugt6AKXOmyI/AAAAAAAAF8Y/pPcM0O58cQI/s60/uganda_2.png 
            [match_time] => 19:00 
            [channels_id] => Array 
             (
              [0] => 19 
             ) 

            [team1] => مالي 
            [team2] => أوغندا 
           ) 

         ) 

       ) 

      [1] => Array 
       (
        [league_id] => 1 
        [league_name] => كأس ملك أسبانيا 
        [league_logo] => http://1.bp.blogspot.com/-zAzWT2Vpbe0/Vmle9TUWDlI/AAAAAAAAD04/-BKgPzRCT1k/s60/Copa_del_Rey_logo_since_2012.png 
        [league_matches] => Array 
         (
          [0] => Array 
           (
            [match_id] => 3 
            [team1logo] => http://4.bp.blogspot.com/-6sfdkbboNdk/VBxVKisRkcI/AAAAAAAADG8/oBKDHmBW5xc/s60/eibar+fc.png 
            [team2logo] => http://2.bp.blogspot.com/-S7p2yMaLywM/UhCz6GqNCRI/AAAAAAAAGFE/CfxzSQk8bgQ/s60/Atletco+Madrid2.Png 
            [match_time] => 18:15 
            [channels_id] => Array 
             (
              [0] => 1 
             ) 

            [team1] => إيبار 
            [team2] => أتلتيكو مدريد 
           ) 

          [1] => Array 
           (
            [match_id] => 4 
            [team1logo] => http://1.bp.blogspot.com/--6y77FXuPLI/UjeVcpJ-AJI/AAAAAAAAGok/QyZhwahPamo/s60/Celta+Vigo.png 
            [team2logo] => http://2.bp.blogspot.com/-tncIAL_U6mI/UgbnQw75V8I/AAAAAAAAFhA/8-9Xpw83GKY/s60/Real+Madrid+(3).png 
            [match_time] => 20:15 
            [channels_id] => Array 
             (
              [0] => 3 
             ) 

            [team1] => سيلتا فيغو 
            [team2] => ريال مدريد 
           ) 

         ) 

       ) 

      [2] => Array 
       (
        [league_id] => 2 
        [league_name] => كأس الرابطة الإنجليزية 
        [league_logo] => http://4.bp.blogspot.com/-31G65FeskFs/VmlezHMPm_I/AAAAAAAAD0w/9OMjh8AQP-M/s60/TheFA_CapitalOneCup.png 
        [league_matches] => Array 
         (
          [0] => Array 
           (
            [match_id] => 5 
            [team1logo] => http://3.bp.blogspot.com/-D0lb4b-qN5U/UgbeDosqjYI/AAAAAAAAFBY/Qg7kvoodvFY/s60/Liverpool+(2).png 
            [team2logo] => http://2.bp.blogspot.com/-prH3jgmfewQ/Ug8ZgNxPlcI/AAAAAAAAGAU/HLmbFvGuDB8/s60/Southampton.png 
            [match_time] => 20:00 
            [channels_id] => Array 
             (
              [0] => 2 
             ) 

            [team1] => ليفربول 
            [team2] => ساوثهامبتون 
           ) 

         ) 

       ) 

      [3] => Array 
       (
        [league_id] => 3 
        [league_name] => كاس ايطاليا 
        [league_logo] => http://2.bp.blogspot.com/-p9Kjb2_GZPU/VnAdQcHV9_I/AAAAAAAAD7E/6R-P54Upui4/s60/tim-cup.png 
        [league_matches] => Array 
         (
          [0] => Array 
           (
            [match_id] => 6 
            [team1logo] => http://1.bp.blogspot.com/-POxAfSSnlW0/UhCt7oQsdLI/AAAAAAAAGDo/rMRXx2mqvUI/s60/Juventus[1].Png 
            [team2logo] => http://3.bp.blogspot.com/-_Qj_GaxVaDE/UgaEPtt7EsI/AAAAAAAAEA8/redsOTj7F4Q/s60/Ac+Milan+(3).png 
            [match_time] => 20:00 
            [channels_id] => Array 
             (
              [0] => 103 
             ) 

            [team1] => يوفنتوس 
            [team2] => ميلان 
           ) 

         ) 

       ) 

     ) 
) 

そして、これはこれまでのところ、私のPHPです:

$str = file_get_contents($url); 
$json = json_decode($str, true); 
$date = $json['date']; 
$leagues = $json['leagues'][0]; 
foreach ($leagues as $key => $value) { 
    for ($i=0; $i<count($value); $i++) { 
     foreach ($value[$i] as $key1 => $value1) { 
      $sql = "INSERT INTO table_name (column1,column2,column3,column4) VALUES (...,...,...,...)"; 
      for ($c=0; $c<count($value1); $c++) { 
       foreach ($value1[$c] as $key2 => $value2) { 
        echo $value2; 
       } 
      } 
     } 
    } 
} 

のforeachによって、すべての各配列を読み取って、データベースのテーブルにすべての値を格納することができますどのように問題。

私はこの事例を高く評価します。ループへ

+0

'$ leagues = $ json ['leagues'] [0];'このレベルで複数の配列インデックスがあるため、これは失敗します。 – JustOnUnderMillions

+0

私はより多くのリーグを持っているので、それは真実ではありません。あなたは '$ json ['leagues'] [0] $ json ['leagues'] [1] $ json ['leagues'] [2 ] 'しかし、その間違った –

+0

'あなたは私のようなマニュアルを使用していない 'あなたはあまりにもforeachのものを繰り返すしたいですか? Sry、あなたが欲しいものを私のために知っています。私は基本的に、あなたの順番を反復する方法を回答しました(下記の答えを参照)。イムアウト。 – JustOnUnderMillions

答えて

0

基本構造あなたのJSONあなたのdatabseのいずれかの構造を示していけないSQLについて

//leagues level 
foreach ($json['leagues'] as $key => $league) { 
    $league_id = $league['league_id']; 
    //leagues -> league_matches level 
    foreach ($league['league_matches'] as $key => $match) { 
     $match_id = $match['match_id']; 
     //channel ids 
     foreach ($match['channels_id'] as $channels_id) { 
      //$channels_id; 
     //create an sql 
     $sql = "INSERT INTO xy (col1,col2,col3) values ($league_id,$match_id,$channels_id)"; 
     $db->query($sql); 
     } 
    } 
} 

内のすべてのノードは、ので、私は、SQLの作成に役立ち傾けます。

+0

Ok ,,,しかし、私は多くのchannels_idを持っています。どのようにしてテーブルに保存できますか?どのようにテーブルのmatch_idを保存することができますか? すべてのレベルをテーブルに保存する必要があります –

+0

@wp画像が更新されています。 – JustOnUnderMillions

0

JSONファイルがjson_encode()メソッドを使用して値を送信することを願っています。 カンマ(、)で配列要素を区切る必要があります。また、の引用符( ')内に配列のインデックスを書く必要があります。ここにJSONページの修正サンプルがあります。受信ページ

$retArr = Array 
(
['date'] => 25-1-2017, 
['leagues'] => Array 
    (
     [0] => Array 
      (
       ['league_id'] => 0, 
       ['league_name'] => كأس امم افريقيا, 
       ['league_logo'] => http://3.bp.blogspot.com/-4iampWUCLto/VmldL2XTz7I/AAAAAAAAD0I/eZFfzSxRbnE/s60/africa.png, 
       ['league_matches'] => Array 
        (
         [0] => Array 
          (
           ['match_id'] => 1, 
           ['team1logo'] => http://2.bp.blogspot.com/-mycTzHXuzJA/Ugbb-UG_3JI/AAAAAAAAEv0/_mzaSHnRedE/s60/egypt+(4).png, 
           ['team2logo'] => http://1.bp.blogspot.com/-kYrkU4jahZY/UgbeVpHf8RI/AAAAAAAAFIQ/TBgM5fvVW14/s60/ghana+(3).png, 
           ['match_time'] => 19:00 
           ['channels_id'] => Array 
            (
             [0] => 18 
            ) 

           ['team1'] => مصر , 
           ['team2'] => غانا 
          ) 

        ) 

      ) 
    ) 
); 
echo json_encode($retArr); 

、あなたは配列としてではなく、JSONオブジェクトとして結果を取得するようにjson_decode()方法でTRUEに2つ目のパラメータを設定する必要があります。

$str = file_get_contents($url); 
$json = json_decode($str, true); 
$date = $json['date']; 
$leagues = $json['leagues'][0]; 
foreach ($leagues as $key => $value) { 
    for ($i=0; $i<count($value); $i++) { 
     foreach ($value[$i] as $key1 => $value1) { 
      $sql = "INSERT INTO table_name (column1,column2,column3,column4) VALUES (...,...,...,...)"; 
      for ($c=0; $c<count($value1); $c++) { 
       foreach ($value1[$c] as $key2 => $value2) { 
        echo $value2; 
       } 
      } 
     } 
    } 
} 

この方法を試してください。

関連する問題