質問するログイン新規登録

回答編集履歴

1

コード追記

2016/04/17 13:03

投稿

unau
unau

スコア2468

answer CHANGED
@@ -10,15 +10,15 @@
10
10
  ON `child`.`parent_id` = `parent`.`parent_id`;
11
11
  SQL;
12
12
 
13
- $member2index = array();
13
+ $id2index = array(); // id から $argicles での index を引くテーブル
14
14
  $articles = array();
15
15
  $stmt = $pdo->query($sql);
16
16
  if ($stmt->rowCount() > 0) {
17
17
  while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
18
- if (array_key_exists($row['id'], $member2index)) {
18
+ if (array_key_exists($row['id'], $id2index)) { // すでにいる人の場合
19
- $index = $member2index[$row['id']];
19
+ $index = $id2index[$row['id']];
20
- } else {
20
+ } else { // 新たに登場した人の場合
21
- $member2index[$row['id']] = $index = count($articles);
21
+ $id2index[$row['id']] = $index = count($articles);
22
22
  $articles[] = array(
23
23
  'id' => $row['id'],
24
24
  'name' => $row['name'],
@@ -31,4 +31,23 @@
31
31
  );
32
32
  }
33
33
  }
34
- ```
34
+ ```
35
+
36
+ 余計なことですが、次のようなコードにして添え字ではなく `id` や `date` をキーにした連想配列にしたほうが、よりフラットになってデータが扱いやすいような気がします。
37
+ ```php
38
+ $articles = array();
39
+ $stmt = $pdo->query($sql);
40
+ if ($stmt->rowCount() > 0) {
41
+ while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
42
+ if (! array_key_exists($row['id'], $articles)) {
43
+ $articles[$row['id']] = array(
44
+ 'id' => $row['id'],
45
+ 'name' => $row['name'],
46
+ 'weight' => array()
47
+ );
48
+ }
49
+ $articles[$row['id']]['weight'][$row['date']] = $row['weight'];
50
+ }
51
+ }
52
+ ```
53
+