回答編集履歴
1
コード追記
answer
CHANGED
|
@@ -10,15 +10,15 @@
|
|
|
10
10
|
ON `child`.`parent_id` = `parent`.`parent_id`;
|
|
11
11
|
SQL;
|
|
12
12
|
|
|
13
|
-
$
|
|
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'], $
|
|
18
|
+
if (array_key_exists($row['id'], $id2index)) { // すでにいる人の場合
|
|
19
|
-
$index = $
|
|
19
|
+
$index = $id2index[$row['id']];
|
|
20
|
-
} else {
|
|
20
|
+
} else { // 新たに登場した人の場合
|
|
21
|
-
$
|
|
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
|
+
|