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

回答編集履歴

1

問題文変更による再回答

2017/12/19 10:25

投稿

Tomak
Tomak

スコア1652

answer CHANGED
@@ -1,3 +1,5 @@
1
+ ※問題文が変更になったことに気付かなかったので回答を書き直しました。
2
+
1
3
  問題文の配列:
2
4
 
3
5
  ```php
@@ -8,71 +10,30 @@
8
10
  ];
9
11
  ```
10
12
 
11
- 多次元配を単純1次元配列にするだけであれば、下記でかがでしょうか
13
+ `preg_match_all()`でマッチした文字ごとSQLクエリを発行したということでしょうか
12
14
 
15
+ 根本的にSQLを`OR`検索にすれば済むような気がします。`Jmeta`というクラスは知らないので何とも言えませんが、下記のような感じではいかがでしょうか。
16
+
13
17
  ```php
14
- $rrr = [];
18
+ $jmeta = new Jmeta();
15
19
 
16
20
  foreach ($matches[0] as $match) {
17
- $rrr = array_merge($rrr, $match);
21
+ $jmeta->orWhere('value', 'like', "%{$match}%");
18
22
  }
19
23
 
20
- var_dump($rrr);
24
+ $rrr = $jmeta->lists('job_id')->toArray();
21
- ```
22
25
 
23
- `while()`を使うなら下記のように書けます。
24
-
25
- ```php
26
- $rrr = [];
27
-
28
- while (null !== $match = array_shift($matches[0])) {
29
- $rrr = array_merge($rrr, $match);
30
- }
31
-
32
26
  var_dump($rrr);
33
- ```
27
+ ````
34
28
 
35
- `array_walk()`使って展開する方法とこんな感じですパフォマンス良くありません。
29
+ 多次元配列単純に1次元配列にするだあれば下記でできま。しかしSQLクエリをルプ内で発行するのはあお勧めできません。
36
30
 
37
31
  ```php
38
32
  $rrr = [];
39
33
 
40
- array_walk($matches[0], function ($match) use (&$rrr) {
41
- $rrr = array_merge($rrr, $match);
42
- });
43
-
44
- //useを使いたくない場合は
45
- //array_walk($matches[0], function ($match, $k, $arr) {
46
- // $arr[0] = array_merge($arr[0], $match);
47
- //}, [&rrr]);
48
-
49
- var_dump($rrr);
50
- ```
51
-
52
- `array_walk_recursive()`を使って展開する方法だとこんな感じですが、これもパフォーマンスは良くありません。
53
-
54
- ```php
55
- $rrr = [];
56
-
57
- array_walk_recursive($matches[0], function ($match) use (&$rrr) {
58
- $rrr[] = $match;
59
- });
60
-
61
- //useを使いたくない場合は
62
- //array_walk_recursive($matches[0], function ($match, $k, $arr) {
63
- // $arr[0][] = $match;
64
- //}, [&rrr]);
65
-
66
- var_dump($rrr);
67
- ```
68
-
69
- 2重ループで頑張る?
70
-
71
- ```php
72
- foreach ($matches[0] as $_matches) {
34
+ foreach ($matches[0] as $match) {
35
+ $ret = Jmeta::where('value', 'like', "%{$match}%")->lists('job_id')->toArray();
73
- foreach ($_matches as $match) {
36
+ $rrr = array_merge($rrr, $ret);
74
- $rrr[] = $match;
75
- }
76
37
  }
77
38
 
78
39
  var_dump($rrr);