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

質問編集履歴

4

誤字

2020/02/25 03:57

投稿

natsunoomoide
natsunoomoide

スコア8

title CHANGED
File without changes
body CHANGED
@@ -27,7 +27,7 @@
27
27
  ```PHP
28
28
  $new = ['val'=>'a4','date'=>'2020-02-25 04:00:00'];
29
29
 
30
- $result1 = [
30
+ $result2 = [
31
31
  ['val'=>'a1','date'=>'2020-02-25 01:00:00'],
32
32
  ['val'=>'a2','date'=>'2020-02-25 02:00:00'],
33
33
  ['val'=>'a3','date'=>'2020-02-25 03:00:00'],

3

実現したいことと該当のソースコードを修正

2020/02/25 03:57

投稿

natsunoomoide
natsunoomoide

スコア8

title CHANGED
File without changes
body CHANGED
@@ -1,31 +1,41 @@
1
1
  ###実現したいこと
2
- 1.`$arr`と`$new`を比較し、`val`が同じ値なら`date`を更新したい。
2
+ 1.`$arr`と`$new`を比較し、`val`が同じ値なら`date`を更新し、同じ値でなければ追加したい。
3
3
  2.`$arr`は最大4件までとしたい。
4
4
 
5
5
  宜しくお願い致します。
6
6
 
7
7
  ###該当のソースコード
8
- `$new`の`val`と同じ値が`$arr`にあるので、その`date`を更新して`$result1`を得るのが目的です。
9
-
10
- そしてもしできれば最新の4件とし、古いものは削除したいです。
8
+ ず元からある配列として`$arr`があります。
11
9
  ```PHP
12
10
  $arr = [
13
11
  ['val'=>'a1','date'=>'2020-02-25 01:00:00'],
14
12
  ['val'=>'a2','date'=>'2020-02-25 02:00:00'],
15
13
  ['val'=>'a3','date'=>'2020-02-25 03:00:00']
16
14
  ];
17
-
15
+ ```
16
+ 次の`$new`が与えられた場合、`val`と同じ値が`$arr`にあるので、その`date`を更新して`$result1`を得るのが目的です。
17
+ ```PHP
18
18
  $new = ['val'=>'a2','date'=>'2020-02-25 04:00:00'];
19
19
 
20
- // ↓ 上の$arrと$newから、以下$result1を得たい
21
-
22
20
  $result1 = [
23
21
  ['val'=>'a1','date'=>'2020-02-25 01:00:00'],
24
22
  ['val'=>'a2','date'=>'2020-02-25 04:00:00'], // valが同じ値なのでdateを更新
25
23
  ['val'=>'a3','date'=>'2020-02-25 03:00:00']
26
24
  ];
25
+ ```
26
+ もし$newが次の場合、$arrに同じ値がないので、普通に追加して以下$result2を得たいです。
27
+ ```PHP
28
+ $new = ['val'=>'a4','date'=>'2020-02-25 04:00:00'];
27
29
 
30
+ $result1 = [
31
+ ['val'=>'a1','date'=>'2020-02-25 01:00:00'],
32
+ ['val'=>'a2','date'=>'2020-02-25 02:00:00'],
33
+ ['val'=>'a3','date'=>'2020-02-25 03:00:00'],
34
+ ['val'=>'a4','date'=>'2020-02-25 04:00:00'] // 普通に追加
35
+ ];
28
36
  ```
37
+ ここまでは1の処理です。もしできれば2の処理として最新の4件までとし、古いものは削除したいのですが、これは文末に「2のロジック」として追記させて頂きました。(あちこち飛んで申し訳ございません。)
38
+
29
39
  ###発生している問題(1について)
30
40
  まず1についてです。
31
41
  > 1.`$arr`と`$new`を比較し、`val`が同じ値なら`date`を更新したい。

2

$resultの番号を修正

2020/02/25 03:56

投稿

natsunoomoide
natsunoomoide

スコア8

title CHANGED
File without changes
body CHANGED
@@ -5,7 +5,7 @@
5
5
  宜しくお願い致します。
6
6
 
7
7
  ###該当のソースコード
8
- `$new`の`val`と同じ値が`$arr`にあるので、その`date`を更新して`$result`を得るのが目的です。
8
+ `$new`の`val`と同じ値が`$arr`にあるので、その`date`を更新して`$result1`を得るのが目的です。
9
9
 
10
10
  そしてもしできれば最新の4件までとし、古いものは削除したいです。
11
11
  ```PHP
@@ -17,9 +17,9 @@
17
17
 
18
18
  $new = ['val'=>'a2','date'=>'2020-02-25 04:00:00'];
19
19
 
20
- // ↓ 上の$arrと$newから、以下$resultを得たい
20
+ // ↓ 上の$arrと$newから、以下$result1を得たい
21
21
 
22
- $result = [
22
+ $result1 = [
23
23
  ['val'=>'a1','date'=>'2020-02-25 01:00:00'],
24
24
  ['val'=>'a2','date'=>'2020-02-25 04:00:00'], // valが同じ値なのでdateを更新
25
25
  ['val'=>'a3','date'=>'2020-02-25 03:00:00']
@@ -84,7 +84,6 @@
84
84
  PHP Notice: Undefined index: date in /aaa/bbb.php on line 0
85
85
  PHP Warning: max(): When only one parameter is given, it must be an array in /aaa/bbb.php on line 0
86
86
  PHP Warning: array_keys() expects parameter 1 to be array, null given in /aaa/bbb.php on line 0
87
-
88
87
  */
89
88
  ```
90
89
  ###試したこと(2について)
@@ -96,11 +95,11 @@
96
95
  ###2のロジック
97
96
  2のロジックについてご説明させて頂きます。
98
97
 
99
- 以下の場合`$new`の`val`は`$arr`のどれとも一致しないので、1を介して`$arr`に普通に追加されることになり`$result`がまず得られます。
98
+ 以下の場合`$new`の`val`は`$arr`のどれとも一致しないので、1を介して`$arr`に普通に追加されることになり`$result2`がまず得られます。
100
99
 
101
- しかしその結果5件になるので、その5件から古いものを削除し`$result2`を得たいということを考えています。これが2の処理です。
100
+ しかしその結果5件になるので、その5件から古いものを削除し`$result3`を得たいということを考えています。これが2の処理です。
102
101
 
103
- (自分がわかりやすいので1と2の処理に分けていますが、欲しいのは`$result2`だけで、`$result`の方は不要です。)
102
+ (自分がわかりやすいので1と2の処理に分けていますが、欲しいのは`$result3`だけで、その過程にある`$result1`や`$result2`の方は不要です。)
104
103
  ```PHP
105
104
  $arr = [
106
105
  ['val'=>'a1','date'=>'2020-02-25 01:00:00'],
@@ -111,9 +110,9 @@
111
110
 
112
111
  $new = ['val'=>'a5','date'=>'2020-02-25 05:00:00'];
113
112
 
114
- // ↓ 1の処理で$resultが得られる
113
+ // ↓ 1の処理で$result2が得られる
115
114
 
116
- $result = [
115
+ $result2 = [
117
116
  ['val'=>'a1','date'=>'2020-02-25 01:00:00'],
118
117
  ['val'=>'a2','date'=>'2020-02-25 02:00:00'],
119
118
  ['val'=>'a3','date'=>'2020-02-25 03:00:00'],
@@ -121,9 +120,9 @@
121
120
  ['val'=>'a5','date'=>'2020-02-25 05:00:00']
122
121
  ];
123
122
 
124
- // ↓ 2の処理で古いものを削除し以下$result2を得たい
123
+ // ↓ 2の処理で古いものを削除し以下$result3を得たい
125
124
 
126
- $result2 = [
125
+ $result3 = [
127
126
  ['val'=>'a2','date'=>'2020-02-25 02:00:00'],
128
127
  ['val'=>'a3','date'=>'2020-02-25 03:00:00'],
129
128
  ['val'=>'a4','date'=>'2020-02-25 04:00:00'],

1

2のロジックを追記

2020/02/25 03:38

投稿

natsunoomoide
natsunoomoide

スコア8

title CHANGED
File without changes
body CHANGED
@@ -91,4 +91,43 @@
91
91
  すみません、最大値を得る方法が上の書き方しかわからず、他に試すことが思い浮かびませんでした。
92
92
 
93
93
  ###バージョン
94
- PHP 7.2.13 です。
94
+ PHP 7.2.13 です。
95
+
96
+ ###2のロジック
97
+ 2のロジックについてご説明させて頂きます。
98
+
99
+ 以下の場合`$new`の`val`は`$arr`のどれとも一致しないので、1を介して`$arr`に普通に追加されることになり`$result`がまず得られます。
100
+
101
+ しかしその結果5件になるので、その5件から古いものを削除し`$result2`を得たいということを考えています。これが2の処理です。
102
+
103
+ (自分がわかりやすいので1と2の処理に分けていますが、欲しいのは`$result2`だけで、`$result`の方は不要です。)
104
+ ```PHP
105
+ $arr = [
106
+ ['val'=>'a1','date'=>'2020-02-25 01:00:00'],
107
+ ['val'=>'a2','date'=>'2020-02-25 02:00:00'],
108
+ ['val'=>'a3','date'=>'2020-02-25 03:00:00'],
109
+ ['val'=>'a4','date'=>'2020-02-25 04:00:00']
110
+ ];
111
+
112
+ $new = ['val'=>'a5','date'=>'2020-02-25 05:00:00'];
113
+
114
+ // ↓ 1の処理で$resultが得られる
115
+
116
+ $result = [
117
+ ['val'=>'a1','date'=>'2020-02-25 01:00:00'],
118
+ ['val'=>'a2','date'=>'2020-02-25 02:00:00'],
119
+ ['val'=>'a3','date'=>'2020-02-25 03:00:00'],
120
+ ['val'=>'a4','date'=>'2020-02-25 04:00:00'],
121
+ ['val'=>'a5','date'=>'2020-02-25 05:00:00']
122
+ ];
123
+
124
+ // ↓ 2の処理で古いものを削除し以下$result2を得たい
125
+
126
+ $result2 = [
127
+ ['val'=>'a2','date'=>'2020-02-25 02:00:00'],
128
+ ['val'=>'a3','date'=>'2020-02-25 03:00:00'],
129
+ ['val'=>'a4','date'=>'2020-02-25 04:00:00'],
130
+ ['val'=>'a5','date'=>'2020-02-25 05:00:00']
131
+ ];
132
+
133
+ ```