回答編集履歴

1

コード追記

2016/04/17 13:03

投稿

unau
unau

スコア2468

test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
 
24
24
 
25
- $member2index = array();
25
+ $id2index = array(); // id から $argicles での index を引くテーブル
26
26
 
27
27
  $articles = array();
28
28
 
@@ -32,13 +32,13 @@
32
32
 
33
33
  while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
34
34
 
35
- if (array_key_exists($row['id'], $member2index)) {
35
+ if (array_key_exists($row['id'], $id2index)) { // すでにいる人の場合
36
36
 
37
- $index = $member2index[$row['id']];
37
+ $index = $id2index[$row['id']];
38
38
 
39
- } else {
39
+ } else { // 新たに登場した人の場合
40
40
 
41
- $member2index[$row['id']] = $index = count($articles);
41
+ $id2index[$row['id']] = $index = count($articles);
42
42
 
43
43
  $articles[] = array(
44
44
 
@@ -65,3 +65,43 @@
65
65
  }
66
66
 
67
67
  ```
68
+
69
+
70
+
71
+ 余計なことですが、次のようなコードにして添え字ではなく `id` や `date` をキーにした連想配列にしたほうが、よりフラットになってデータが扱いやすいような気がします。
72
+
73
+ ```php
74
+
75
+ $articles = array();
76
+
77
+ $stmt = $pdo->query($sql);
78
+
79
+ if ($stmt->rowCount() > 0) {
80
+
81
+ while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
82
+
83
+ if (! array_key_exists($row['id'], $articles)) {
84
+
85
+ $articles[$row['id']] = array(
86
+
87
+ 'id' => $row['id'],
88
+
89
+ 'name' => $row['name'],
90
+
91
+ 'weight' => array()
92
+
93
+ );
94
+
95
+ }
96
+
97
+ $articles[$row['id']]['weight'][$row['date']] = $row['weight'];
98
+
99
+ }
100
+
101
+ }
102
+
103
+ ```
104
+
105
+
106
+
107
+