分组和/或重写现有数组

时间:2016-03-02 13:02:30

标签: php arrays json

我使用数据库系统进行某种类型的游戏竞赛,玩家可以组队参加比赛。现在玩家有自己的数据库,然后有一个团队数据库(团队ID,名称,加入密码等)和一个数据库,我保存哪个玩家(玩家名称/ ID是在哪个团队名称/ ID)。我的数据库调用给了一个包含team_name,username等的数组。我想用一个常用的team_name值对用户进行分组,但是我无法根据我的需要重写它。

我想在C#应用程序中为个人使用构建某种api。在那里,我希望我的脚本输出为json,我希望向所有团队展示一些细节。现在我使用以下代码:

$team_keys = array();
    foreach ($team_data AS $k => $sub_array)
    {
        $this_team = $sub_array['team_name'];
        $team_keys[$this_team][$k] = array('username' => $sub_array['username']);
    }
echo json_encode($team_keys, JSON_PRETTY_PRINT);

这给了我这样的输出:

{
    "Team1": {
        "0": {
            "username": "player1"
        },
        "1": {
            "username": "player2"
        },
        "22": {
            "username": "player3"
        }
    },
    "Team2": {
        "2": {
            "username": "player4"
        },
        "3": {
            "username": "player5"
        }, .....
}

但我希望实现以下目标:

    {
    "team_name": "Team1",
    "team_password": "secret",
    "creation_timestamp": "123456789",
    "players": [
        "Player1",
        "Player2",
        "Player3"
    ]
}, ....

我尝试了很多不同的方法,但我根本无法重新组合并重写数组以满足我的需求。希望有人可以帮助我。

编辑:$ team_data看起来像这样(我使用JOIN加入我的用户,团队和team_member表以获取所有数据):

array(83) {
  [0]=>
  array(4) {
    ["username"]=>
    string(8) "Player1"
    ["team_name"]=>
    string(8) "Team1"
    ["team_password"]=>
    string(7) "secret"
    ["team_id"]=>
    string(1) "1"
  }
  [1]=>
  array(4) {
    ["username"]=>
    string(11) "Player2"
    ["team_name"]=>
    string(8) "Team1"
    ["team_password"]=>
    string(7) "secret"
    ["team_id"]=>
    string(1) "1"
  }
  [2]=>
  array(4) {
    ["username"]=>
    string(8) "Player3"
    ["team_name"]=>
    string(10) "Team2"
    ["team_password"]=>
    string(6) "ultrasecret"
    ["team_id"]=>
    string(1) "2"
  },...

1 个答案:

答案 0 :(得分:0)

所以输入是以下数据

array(4) {
  [0]=>
  array(4) {
    ["team_name"]=>
    string(5) "Team1"
    ["username"]=>
    string(7) "player1"
    ["team_password"]=>
    string(6) "secret"
    ["team_id"]=>
    int(1)
  }
  [1]=>
  array(4) {
    ["team_name"]=>
    string(5) "Team1"
    ["username"]=>
    string(7) "player2"
    ["team_password"]=>
    string(6) "secret"
    ["team_id"]=>
    int(1)
  }
  [2]=>
  array(4) {
    ["team_name"]=>
    string(5) "Team2"
    ["username"]=>
    string(7) "player1"
    ["team_password"]=>
    string(6) "secret"
    ["team_id"]=>
    int(2)
  }
  [3]=>
  array(4) {
    ["team_name"]=>
    string(5) "Team2"
    ["username"]=>
    string(7) "player2"
    ["team_password"]=>
    string(6) "secret"
    ["team_id"]=>
    int(2)
  }
}

这是我的代码,我的测试版为$ team_data

<?php

$team_data = array(array('team_name' => 'Team1', 'username' => 'player1', 'team_password' => 'secret', 'team_id' => 1)
,array('team_name' => 'Team1', 'username' => 'player2', 'team_password' => 'secret', 'team_id' => 1)
,array('team_name' => 'Team2', 'username' => 'player1', 'team_password' => 'secret', 'team_id' => 2)
,array('team_name' => 'Team2', 'username' => 'player2', 'team_password' => 'secret', 'team_id' => 2)
);

$team_keys = array();
foreach ($team_data AS $player_dara) {
    if (!isset($team_keys[$player_dara['team_id']])) {
        $team_keys[$player_dara['team_id']] = array();
        $team_keys[$player_dara['team_id']]['team_name'] = $player_dara['team_name'];
        $team_keys[$player_dara['team_id']]['team_id'] = $player_dara['team_id'];
        $team_keys[$player_dara['team_id']]['secret'] = $player_dara['secret'];
        $team_keys[$player_dara['team_id']]['players'] = array();
    }
    $team_keys[$player_dara['team_id']]['players'][] = $player_dara['username'];
}


echo json_encode(array_values($team_keys), JSON_PRETTY_PRINT);

<强>输出

[
 {
   "team_name": "Team1",
   "team_id": 1,
   "secret": null,
   "players": [
     "player1",
     "player2"
   ]
 },
 {
  "team_name": "Team2",
  "team_id": 2,
  "secret": null,
  "players": [
    "player1",
    "player2"
  ]
 }
]