回答編集履歴

1

問題文変更による再回答

2017/12/19 10:25

投稿

Tomak
Tomak

スコア1652

test CHANGED
@@ -1,3 +1,7 @@
1
+ ※問題文が変更になったことに気付かなかったので回答を書き直しました。
2
+
3
+
4
+
1
5
  問題文の配列:
2
6
 
3
7
 
@@ -18,7 +22,39 @@
18
22
 
19
23
 
20
24
 
25
+ `preg_match_all()`でマッチした文字列ごとにSQLクエリを発行したいということでしょうか?
26
+
27
+
28
+
29
+ 根本的にSQLを`OR`検索にすれば済むような気がします。`Jmeta`というクラスは知らないので何とも言えませんが、下記のような感じではいかがでしょうか。
30
+
31
+
32
+
33
+ ```php
34
+
35
+ $jmeta = new Jmeta();
36
+
37
+
38
+
39
+ foreach ($matches[0] as $match) {
40
+
41
+ $jmeta->orWhere('value', 'like', "%{$match}%");
42
+
43
+ }
44
+
45
+
46
+
47
+ $rrr = $jmeta->lists('job_id')->toArray();
48
+
49
+
50
+
51
+ var_dump($rrr);
52
+
53
+ ````
54
+
55
+
56
+
21
- 多次元配列を単純に1次元配列にするだけであれば下記でいかがでしょうか。
57
+ 多次元配列を単純に1次元配列にするだけであれば下記でできます。しかし、SQLクエリをループ内で発行するのはあまりお勧めできません
22
58
 
23
59
 
24
60
 
@@ -30,7 +66,9 @@
30
66
 
31
67
  foreach ($matches[0] as $match) {
32
68
 
69
+ $ret = Jmeta::where('value', 'like', "%{$match}%")->lists('job_id')->toArray();
70
+
33
- $rrr = array_merge($rrr, $match);
71
+ $rrr = array_merge($rrr, $ret);
34
72
 
35
73
  }
36
74
 
@@ -39,119 +77,3 @@
39
77
  var_dump($rrr);
40
78
 
41
79
  ```
42
-
43
-
44
-
45
- `while()`を使うなら下記のように書けます。
46
-
47
-
48
-
49
- ```php
50
-
51
- $rrr = [];
52
-
53
-
54
-
55
- while (null !== $match = array_shift($matches[0])) {
56
-
57
- $rrr = array_merge($rrr, $match);
58
-
59
- }
60
-
61
-
62
-
63
- var_dump($rrr);
64
-
65
- ```
66
-
67
-
68
-
69
- `array_walk()`を使って展開する方法だとこんな感じですが、パフォーマンスは良くありません。
70
-
71
-
72
-
73
- ```php
74
-
75
- $rrr = [];
76
-
77
-
78
-
79
- array_walk($matches[0], function ($match) use (&$rrr) {
80
-
81
- $rrr = array_merge($rrr, $match);
82
-
83
- });
84
-
85
-
86
-
87
- //useを使いたくない場合は
88
-
89
- //array_walk($matches[0], function ($match, $k, $arr) {
90
-
91
- // $arr[0] = array_merge($arr[0], $match);
92
-
93
- //}, [&rrr]);
94
-
95
-
96
-
97
- var_dump($rrr);
98
-
99
- ```
100
-
101
-
102
-
103
- `array_walk_recursive()`を使って展開する方法だとこんな感じですが、これもパフォーマンスは良くありません。
104
-
105
-
106
-
107
- ```php
108
-
109
- $rrr = [];
110
-
111
-
112
-
113
- array_walk_recursive($matches[0], function ($match) use (&$rrr) {
114
-
115
- $rrr[] = $match;
116
-
117
- });
118
-
119
-
120
-
121
- //useを使いたくない場合は
122
-
123
- //array_walk_recursive($matches[0], function ($match, $k, $arr) {
124
-
125
- // $arr[0][] = $match;
126
-
127
- //}, [&rrr]);
128
-
129
-
130
-
131
- var_dump($rrr);
132
-
133
- ```
134
-
135
-
136
-
137
- 2重ループで頑張る?
138
-
139
-
140
-
141
- ```php
142
-
143
- foreach ($matches[0] as $_matches) {
144
-
145
- foreach ($_matches as $match) {
146
-
147
- $rrr[] = $match;
148
-
149
- }
150
-
151
- }
152
-
153
-
154
-
155
- var_dump($rrr);
156
-
157
- ```