質問編集履歴
3
コードを修正しました
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
|
-
|
98
|
+
foreach ($arg1 as $new => $newVal) {
|
99
|
+
foreach ($arg2 as $current => $currentVal) {
|
100
100
|
// thread_id が同じ場合は、新しい配列の値を採用して、新しい配列を先頭に持っていく
|
101
|
-
if ( $
|
101
|
+
if ( $new[5]['thread_id'] == $current[5]['thread_id'] ) {
|
102
|
-
$
|
102
|
+
$currentVal['time'] = $newVal['time'];
|
103
|
-
$
|
103
|
+
$currentVal['sender_id'] = $newVal['sender_id'];
|
104
|
-
$
|
104
|
+
$currentVal['read'] = $newVal['read'];
|
105
|
-
$id[$key] = $arg2[$key]['time'];
|
106
|
-
$arg2_sort = array_multisort($id, SORT_DESC, $arg2);
|
107
|
-
break;
|
108
|
-
|
105
|
+
return $arg2;
|
109
|
-
|
106
|
+
}
|
110
|
-
|
107
|
+
// thread_id が異なる場合は現在の配列と新しい配列を結合して、新しい配列を先頭に持っていく
|
111
|
-
|
108
|
+
else{
|
112
|
-
|
109
|
+
$arg1_arg2 = array_merge($arg1, $arg2);
|
113
|
-
break;
|
114
|
-
|
110
|
+
return $arg1_arg2;
|
115
|
-
|
111
|
+
}
|
116
|
-
|
112
|
+
}
|
117
|
-
|
113
|
+
}
|
118
114
|
}
|
119
115
|
|
120
116
|
|
2
タイトルの変更
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
PHPで
|
1
|
+
PHPで条件に適合する配列を連結したい
|
body
CHANGED
File without changes
|
1
コードを分割
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
###実現したいこと
|
2
|
-
PHP初心者で、配列の
|
2
|
+
PHP初心者で、配列の合体がどうしてもできません。
|
3
3
|
|
4
|
-
下記の「現在の配列``$
|
4
|
+
下記の「現在の配列``$current``」と「新しい配列``$new``」を合体して、「目的の配列``$update``」にしたいと考えています。
|
5
5
|
|
6
|
+
###そのための条件
|
6
7
|
合体の条件は3つありまして、
|
7
8
|
|
8
|
-
➀``thread_id``が同じなら合体
|
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
|
+
質問で分かりにくい点などございましたらご指摘ください。
|