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

質問編集履歴

2

2020-12-09 11:13追記

2020/12/09 02:13

投稿

ringorin
ringorin

スコア40

title CHANGED
File without changes
body CHANGED
@@ -1,3 +1,4 @@
1
+ ###実現したいこと
1
2
  お世話になります。
2
3
  `group`の値ごとにグループ化し、任意の連番を付けたいです。
3
4
 
@@ -26,6 +27,7 @@
26
27
  ];
27
28
 
28
29
  ```
30
+ ###試していること
29
31
  まず`foreach`でキーをつけるまではいいのですが、これではグループ化できません。
30
32
  ```php
31
33
  /*
@@ -88,4 +90,34 @@
88
90
  --------------*/
89
91
  var_dump($result);
90
92
  ```
91
- アドバイス宜しくお願い致します。
93
+ アドバイス宜しくお願い致します。
94
+
95
+ ###2020-12-09 11:13追記
96
+ その後、以下のように二回`foreach`をかければできましたが、泥臭すぎる印象です。
97
+ ```php
98
+ /*
99
+ グループ化
100
+ --------------*/
101
+ $grouped = [];
102
+ foreach ( $rows as $row ) {
103
+ $group = $row['group'];
104
+ $grouped[$group][] = $row;
105
+ }
106
+
107
+ /*
108
+ キーをつける
109
+ --------------*/
110
+ $result = [];
111
+ $i = 1;
112
+ foreach ( $grouped as $group => $array ) {
113
+ $key = 'key_' . $i;
114
+ $result[$key] = $array;
115
+ $i++;
116
+ }
117
+
118
+ /*
119
+ 結果を確認
120
+ --------------*/
121
+ var_dump($result);
122
+ ```
123
+ もう少しいい方法ありましたら宜しくお願い致します。

1

コメントアウトで説明を追加

2020/12/09 02:13

投稿

ringorin
ringorin

スコア40

title CHANGED
File without changes
body CHANGED
@@ -28,6 +28,9 @@
28
28
  ```
29
29
  まず`foreach`でキーをつけるまではいいのですが、これではグループ化できません。
30
30
  ```php
31
+ /*
32
+ キーをつける
33
+ --------------*/
31
34
  $result = [];
32
35
  $i = 1;
33
36
  foreach ( $rows as $row ) {
@@ -35,25 +38,42 @@
35
38
  $result[$key][] = $row;
36
39
  $i++;
37
40
  }
41
+
42
+ /*
43
+ 結果を確認
44
+ --------------*/
38
45
  var_dump($result);
39
46
  ```
40
47
  今度はグループ化しようと思うと、キーがつけられません。
41
48
  ```php
49
+ /*
50
+ グループ化
51
+ --------------*/
42
52
  $result = [];
43
53
  foreach ( $rows as $row ) {
44
54
  $group = $row['group'];
45
55
  $result[$group][] = $row;
46
56
  }
57
+
58
+ /*
59
+ 結果を確認
60
+ --------------*/
47
61
  var_dump($result);
48
62
  ```
49
63
  先にグループ化してからキーを振りなおすために以下やってみたのですが、`STEP4`で躓きました。
50
64
  ```php
51
-
65
+ /*
66
+ グループ化
67
+ --------------*/
52
68
  $result = [];
53
69
  foreach ( $rows as $row ) {
54
70
  $group = $row['group'];
55
71
  $result[$group][] = $row;
56
72
  }
73
+
74
+ /*
75
+ キーをつける
76
+ --------------*/
57
77
  // STEP1. array_values で0からになるが、1からにしたいので余分な値を先頭に一つ追加しておく
58
78
  array_unshift($result,[]);
59
79
  // STEP2. array_values でグループ名になっているキーを0からの連番にする
@@ -62,7 +82,10 @@
62
82
  unset($result[0]);
63
83
  // STEP4. 連番にプレフィックスを付けて「key_1」のようにする
64
84
  extract($result, EXTR_PREFIX_ALL, 'key_');
85
+
65
- // 結果を確認
86
+ /*
87
+ 結果を確認
88
+ --------------*/
66
89
  var_dump($result);
67
90
  ```
68
91
  アドバイス宜しくお願い致します。