在php中创建多级JSON


Create multi level JSON in php

我想知道如何在php中创建这样的JSON数组。。。

{  
   "roster1":{  
      "player0":{  
         "sport":"NFL",
         "firstname":"Tyrod",
         "lastname":"Taylor"
      },
      "player1":{  
         "sport":"NFL",
         "firstname":"Lamar",
         "lastname":"Miller"
      }
   }
   "roster2":{  
      "player0":{  
         "sport":"NFL",
         "firstname":"Carson",
         "lastname":"Palmer"
      },
      "player1":{  
         "sport":"NFL",
         "firstname":"David",
         "lastname":"Johnson"
      }
   }
}

我知道它一定是某种多维数组,我假设?我试过。。。

$obj = new stdClass();
$y = 1;

$players["player".$x]['sport'] = "NFL";
$players["player".$x]['firstname'] = "Tyrod";
$players["player".$x]['lastname'] = "Taylor";
$x++;
    $players["player".$x]['sport'] = "NFL";
$players["player".$x]['firstname'] = "Lamar";
$players["player".$x]['lastname'] = "Miller";

但这似乎是一个可怕的方法,我正在做一些非常愚蠢的事情。我真的很想知道做这种事情的正确方法。

我认为您需要创建insted for循环来创建子数组

for ($y = 1; $y < 3; $y++) {
    $players = array();
    for ( $x= 1; $x < 2; $x++ ) {
        $players["player".$x]['sport'] = "NFL";
        $players["player".$x]['firstname'] = "Tyrod";
        $players["player".$x]['lastname'] = "Taylor";
    }
    $roster['roster'.$y][] = $players;
}
// this will give you what you want my friend
echo json_encode($roster);

理想情况下,您不会将花名册和球员编号添加到密钥中(花名册1、球员1等)。我会用数组键为我做这项工作。比如:

 $data['rosters'][] = [
                        ['sport' => 'nfl', 'firstname' => 'Tyrod', 'lastname' => 'Taylor'],
                        ['sport' => 'nfl', 'firstname' => 'Lamar', 'lastname' => 'Miller'],
                    ];
 $data['rosters'][] = [
                        ['sport' => 'nfl', 'firstname' => 'Carson', 'lastname' => 'Palmer'],
                        ['sport' => 'nfl', 'firstname' => 'David', 'lastname' => 'Johnson'],
                    ];
 echo json_encode($data);

这应该会给你:

{
    "rosters": [
        [{
            "sport": "nfl",
            "firstname": "Tyrod",
            "lastname": "Taylor"
        }, {
            "sport": "nfl",
            "firstname": "Lamar",
            "lastname": "Miller"
        }],
        [{
            "sport": "nfl",
            "firstname": "Carson",
            "lastname": "Palmer"
        }, {
            "sport": "nfl",
            "firstname": "David",
            "lastname": "Johnson"
        }]
    ]
}

下面是一个如何使用循环来构建此数据结构的示例。

$data = [];
// ...for the example, but you'll want this to be your source data.
$number_of_rosters = 2;
$number_of_players = 2;
foreach (range(1, $number_of_rosters) as $index => $roster) {
    foreach (range(1, $number_of_players) as $player) {
        $data['rosters'][$index][] = ['sport' => 'nfl', 'firstname' => 'Tyrod', 'lastname' => 'Taylor'];
    }
}