1

MYSQL クエリの結果から構築された連想配列があります。10 個の一意の「名前」と 19 個の一意の「display_name」(2B、3B、HR、RBI、HR など) で構成される 190 個のキーがあり、各「name」と「display_name」の組み合わせには「値」があります。

    array (size=190)
  0 => 
    array (size=3)
      'name' => string 'Name 1' (length=17)
      'display_name' => string '2B' (length=2)
      'value' => string '10' (length=2)
  1 => 
    array (size=3)
      'name' => string 'Name 2' (length=20)
      'display_name' => string '2B' (length=2)
      'value' => string '7' (length=1)
  2 => 
    array (size=3)
      'name' => string 'Name 3' (length=18)
      'display_name' => string '2B' (length=2)
      'value' => string '5' (length=1)
  3 => 
    array (size=3)
      'name' => string 'Name 4' (length=19)
      'display_name' => string '2B' (length=2)
      'value' => string '3' (length=1)
  4 => 
    array (size=3)
      'name' => string 'Name 5' (length=11)
      'display_name' => string '2B' (length=2)
      'value' => string '4' (length=1)

一意の「display_name」をキーとして、「名前」をキーとして、それに関連付けられた「値」を持つ配列を作成したいと思います。つまり、これを表として視覚化すると、現在は次のようになります。

name  :   display name :  value
name1     2B              10
name2     2B              7
name3     2B              5
name4     2B              3
name5     2B              4

私はそれが次のようになりたい:

name   :  2B   :  3B  :  RBI  :  HR
name1     10      5      7       10
name2     8       6      5       9
name3     9       4      3       5
name4     2       1      1       1
name5     6       2      2       8 

MYSQL でこれを実行できることはわかっていますが、PHP での解決策を知りたいです。私はさまざまなことを試し、参照しました(他の多くの中でも): PHPでの多次元配列の転置

MYSQL 同様のソリューション: MYSQL で行をヘッダーに転置する

私が得ることができる最も近いのはこれですが、$fieldHash['display_name'] 190個すべての値ではなく、一意の「display_name」値をキーとして取得します。

while ($arr = mysql_fetch_assoc($res)){
$row [] = $arr;
foreach($row as $resultArray){
foreach ( $resultArray as $key=>$val ){
$fieldHash[$key][] = $val; 
}
}
}

この例では、データ モデルはわかっていますが、将来的には「display_name」の数に関係なく動的にしたいと考えています。

役立つ場合は、MYSQL クエリを次に示します。

$query = "SELECT teaminfo.name, league_stat_categories.display_name, team_points_season.value
FROM team_points_season, teaminfo, league_stat_categories 
WHERE team_points_season.league_key = '$league_key' AND team_points_season.team_key = teaminfo.team_key AND team_points_season.league_key = league_stat_categories.league_key 
AND team_points_season.stat_id = league_stat_categories.stat_id
GROUP BY league_stat_categories.display_name, team_points_season.team_key";

助けてくれてありがとう!

4

1 に答える 1