質問編集履歴

3

コードを修正しました

2019/02/02 09:27

投稿

love_kinniky
love_kinniky

スコア22

test CHANGED
File without changes
test CHANGED
@@ -192,45 +192,37 @@
192
192
 
193
193
  function mymerge($arg1, $arg2) {
194
194
 
195
- foreach ($arg1 as $item) {
196
-
197
- foreach ($arg2 as $key=>$val) {
195
+ foreach ($arg1 as $new => $newVal) {
196
+
197
+ foreach ($arg2 as $current => $currentVal) {
198
198
 
199
199
  // thread_id が同じ場合は、新しい配列の値を採用して、新しい配列を先頭に持っていく
200
200
 
201
- if ( $item['thread_id'] == $val['thread_id'] ) {
201
+ if ( $new[5]['thread_id'] == $current[5]['thread_id'] ) {
202
-
202
+
203
- $arg2[$key]['time'] = $item['time'];
203
+ $currentVal['time'] = $newVal['time'];
204
-
204
+
205
- $arg2[$key]['sender_id'] = $item['sender_id'];
205
+ $currentVal['sender_id'] = $newVal['sender_id'];
206
-
206
+
207
- $arg2[$key]['read'] = $item['read'];
207
+ $currentVal['read'] = $newVal['read'];
208
-
209
- $id[$key] = $arg2[$key]['time'];
208
+
210
-
211
- $arg2_sort = array_multisort($id, SORT_DESC, $arg2);
212
-
213
- break;
214
-
215
- return $arg2_sort;
209
+ return $arg2;
216
-
210
+
217
- }
211
+ }
218
-
212
+
219
- // thread_id が異なる場合は現在の配列と新しい配列を結合して、新しい配列を先頭に持っていく
213
+ // thread_id が異なる場合は現在の配列と新しい配列を結合して、新しい配列を先頭に持っていく
220
-
214
+
221
- else{
215
+ else{
222
-
216
+
223
- $arg1_arg2 = array_merge($arg1, $arg2);
217
+ $arg1_arg2 = array_merge($arg1, $arg2);
224
-
225
- break;
218
+
226
-
227
- return $arg1_arg2;
219
+ return $arg1_arg2;
228
-
220
+
229
- }
221
+ }
230
-
222
+
231
- }
223
+ }
232
-
224
+
233
- }
225
+ }
234
226
 
235
227
  }
236
228
 

2

タイトルの変更

2019/02/02 09:27

投稿

love_kinniky
love_kinniky

スコア22

test CHANGED
@@ -1 +1 @@
1
- PHPで「array_multisort」や「array_merge」などを使いながら、条件に適合する配列を連結したい
1
+ PHPで条件に適合する配列を連結したい
test CHANGED
File without changes

1

コードを分割

2019/02/02 09:11

投稿

love_kinniky
love_kinniky

スコア22

test CHANGED
File without changes
test CHANGED
@@ -1,22 +1,24 @@
1
1
  ###実現したいこと
2
2
 
3
- PHP初心者で、配列の連結がどうしてもできません。
3
+ PHP初心者で、配列の合体がどうしてもできません。
4
-
5
-
6
-
4
+
5
+
6
+
7
- 下記の「現在の配列``$current_array``」と「新しい配列``$new_array``」を合体して、「目的の配列``$update_array``」に合体したいと考えています。
7
+ 下記の「現在の配列``$current``」と「新しい配列``$new``」を合体して、「目的の配列``$update``」にしたいと考えています。
8
+
9
+
10
+
8
-
11
+ ###そのための条件
9
-
10
12
 
11
13
  合体の条件は3つありまして、
12
14
 
13
15
 
14
16
 
15
- ➀``thread_id``が同じなら合体し、違えば「新しい配列``$new_array``」を先頭にして連結する。
17
+ ➀``thread_id``が同じなら次の➁➂で合体する。違えば「新しい配列``$new_array``」を先頭にして普通に連結する。
16
-
17
-
18
-
18
+
19
+
20
+
19
- そして合体ときは、
21
+ 合体させるときは、
20
22
 
21
23
  ➁``time``、``sender_id``、``read``の3つについて、新しい配列の値だけを使う。
22
24
 
@@ -32,7 +34,9 @@
32
34
 
33
35
 
34
36
 
35
- ###配列
37
+ ###「現在の配列($current_array)」と「新しい配列($current_array)」
38
+
39
+ まずこの2つの配列のうち``thread_id``が同じものを合体させたいです。
36
40
 
37
41
  ```php
38
42
 
@@ -112,7 +116,15 @@
112
116
 
113
117
  );
114
118
 
115
-
119
+ ```
120
+
121
+ ###「目的の配列($current)」
122
+
123
+ 上の2つの合体で作りたいのが下記になります。
124
+
125
+ ```php
126
+
127
+ <?php
116
128
 
117
129
  /*
118
130
 
@@ -234,18 +246,12 @@
234
246
 
235
247
  $update_array = mymerge( $new_array, $current_array );
236
248
 
237
-
238
-
239
-
240
-
241
- /*
242
-
243
- * 確認
244
-
245
- */
246
-
247
249
  var_export($update_array);
248
250
 
249
251
  ?>
250
252
 
251
253
  ```
254
+
255
+ どのようにすれば``mymerge``は「目的の配列($update_array)」を作れるような関数にできがるでしょうか。
256
+
257
+ 質問で分かりにくい点などございましたらご指摘ください。