回答編集履歴
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 | 
            +
             | 
