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

質問編集履歴

3

コードを修正しました

2019/02/02 09:27

投稿

love_kinniky
love_kinniky

スコア22

title CHANGED
File without changes
body CHANGED
@@ -95,26 +95,22 @@
95
95
  * usage: $update_array = mymerge($new_array, $current_array);
96
96
  */
97
97
  function mymerge($arg1, $arg2) {
98
- foreach ($arg1 as $item) {
99
- foreach ($arg2 as $key=>$val) {
98
+ foreach ($arg1 as $new => $newVal) {
99
+ foreach ($arg2 as $current => $currentVal) {
100
100
  // thread_id が同じ場合は、新しい配列の値を採用して、新しい配列を先頭に持っていく
101
- if ( $item['thread_id'] == $val['thread_id'] ) {
101
+ if ( $new[5]['thread_id'] == $current[5]['thread_id'] ) {
102
- $arg2[$key]['time'] = $item['time'];
102
+ $currentVal['time'] = $newVal['time'];
103
- $arg2[$key]['sender_id'] = $item['sender_id'];
103
+ $currentVal['sender_id'] = $newVal['sender_id'];
104
- $arg2[$key]['read'] = $item['read'];
104
+ $currentVal['read'] = $newVal['read'];
105
- $id[$key] = $arg2[$key]['time'];
106
- $arg2_sort = array_multisort($id, SORT_DESC, $arg2);
107
- break;
108
- return $arg2_sort;
105
+ return $arg2;
109
- }
106
+ }
110
- // thread_id が異なる場合は現在の配列と新しい配列を結合して、新しい配列を先頭に持っていく
107
+ // thread_id が異なる場合は現在の配列と新しい配列を結合して、新しい配列を先頭に持っていく
111
- else{
108
+ else{
112
- $arg1_arg2 = array_merge($arg1, $arg2);
109
+ $arg1_arg2 = array_merge($arg1, $arg2);
113
- break;
114
- return $arg1_arg2;
110
+ return $arg1_arg2;
115
- }
111
+ }
116
- }
112
+ }
117
- }
113
+ }
118
114
  }
119
115
 
120
116
 

2

タイトルの変更

2019/02/02 09:27

投稿

love_kinniky
love_kinniky

スコア22

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

1

コードを分割

2019/02/02 09:11

投稿

love_kinniky
love_kinniky

スコア22

title CHANGED
File without changes
body CHANGED
@@ -1,13 +1,14 @@
1
1
  ###実現したいこと
2
- PHP初心者で、配列の連結がどうしてもできません。
2
+ PHP初心者で、配列の合体がどうしてもできません。
3
3
 
4
- 下記の「現在の配列``$current_array``」と「新しい配列``$new_array``」を合体して、「目的の配列``$update_array``」に合体したいと考えています。
4
+ 下記の「現在の配列``$current``」と「新しい配列``$new``」を合体して、「目的の配列``$update``」にしたいと考えています。
5
5
 
6
+ ###そのための条件
6
7
  合体の条件は3つありまして、
7
8
 
8
- ➀``thread_id``が同じなら合体し、違えば「新しい配列``$new_array``」を先頭にして連結する。
9
+ ➀``thread_id``が同じなら次の➁➂で合体する。違えば「新しい配列``$new_array``」を先頭にして普通に連結する。
9
10
 
10
- そして合体ときは、
11
+ 合体させるときは、
11
12
  ➁``time``、``sender_id``、``read``の3つについて、新しい配列の値だけを使う。
12
13
  ➂新しい配列を先頭に持っていく。
13
14
 
@@ -15,7 +16,8 @@
15
16
 
16
17
  これを実現するために文末のソースコードを書いて奮闘しているのですが、どうしてもできず、質問させて頂きました。
17
18
 
18
- ###配列
19
+ ###「現在の配列($current_array)」と「新しい配列($current_array)」
20
+ まずこの2つの配列のうち``thread_id``が同じものを合体させたいです。
19
21
  ```php
20
22
  <?php
21
23
  /*
@@ -55,7 +57,11 @@
55
57
  'thread_id'=>'5'
56
58
  ),
57
59
  );
58
-
60
+ ```
61
+ ###「目的の配列($current)」
62
+ 上の2つの合体で作りたいのが下記になります。
63
+ ```php
64
+ <?php
59
65
  /*
60
66
  * 目的の配列($update_array)
61
67
  */
@@ -116,11 +122,8 @@
116
122
  * 上の関数を使って、目的の配列 ($update_array)を作る
117
123
  */
118
124
  $update_array = mymerge( $new_array, $current_array );
119
-
120
-
121
- /*
122
- * 確認
123
- */
124
125
  var_export($update_array);
125
126
  ?>
126
- ```
127
+ ```
128
+ どのようにすれば``mymerge``は「目的の配列($update_array)」を作れるような関数にできがるでしょうか。
129
+ 質問で分かりにくい点などございましたらご指摘ください。