質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

1467閲覧

foreachで作成した多次元配列を一つにまとめるにはどうすればよいでしょうか

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

1クリップ

投稿2017/12/19 08:01

編集2017/12/19 09:21

##わからないこと
いつもお世話になっております。
このたびforeachで生成した多次元配列を一次元の配列にまとめなおそうとしています。
ただ、その処理の書き方がわかっておらず手をこまねております。
どうかご教授いただければ幸いです。

###コード

【追記】 「preg_match_all」にて文字列内の数字をすべて取得しています。 preg_match_all("/[0-9]+/", $otherJitem, $matches); foreach($matches[0] as $match) { $rrr[] = Jmeta::where('value', 'like', "%{$match}%")->lists('job_id')->toArray(); }

$rrrの出力結果

0 => array:233 [▼ 0 => 90 1 => 28514 2 => 28515 3 => 71265 4 => 71736 5 => 9304 6 => 15607 ] 1 => array:144 [▼ 0 => 28514 1 => 28515 2 => 71735 3 => 71736 4 => 9304 5 => 15607 6 => 71852 7 => 71853 8 => 71854 9 => 71855 10 => 72099 11 => 73377 ] 2 => array:37 [▼ 0 => 74918 1 => 74917 2 => 73257 3 => 73256 4 => 73253 5 => 72839 6 => 79705 7 => 83441 8 => 83442 9 => 84940 10 => 84943 11 => 84944 12 => 89020 13 => 89255 14 => 89260 15 => 91904 ]

上記を

0 => 90 1 => 28514 2 => 28515 3 => 71265 4 => 71736 5 => 9304 6 => 15607 7 => 28514 8 => 28515 9 => 71735 10 => 71736 11 => 9304 12 => 15607 13 => 71852 14 => 71853 15 => 71854 16 => 71855 17 => 72099 18 => 73377 19 => 74918 20 => 74917 21 => 73257 22 => 73256 23 => 73253 24 => 72839 25 => 79705 26 => 83441 27 => 83442 28 => 84940 29 => 84943 30 => 84944 31 => 89020 32 => 89255 33 => 89260 34 => 91904

というように整形しなおしたいです。

何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2017/12/19 08:15

どういうロジックで結果のを導いているかわかりません。
退会済みユーザー

退会済みユーザー

2017/12/19 08:52

失礼いたしました。「コード」内に追記をさせていただきました。ご確認のほどよろしくお願いします。
yambejp

2017/12/19 09:17

追記希望欄だとちょっとわかりづらいので回答欄に記載しておきました。
guest

回答2

0

ベストアンサー

※問題文が変更になったことに気付かなかったので回答を書き直しました。

問題文の配列:

php

1$matches[0] = [ 2 [90,28514,28515,71265,71736,9304,15607], 3 [28514,28515,71735,71736,9304,15607,71852,71853,71854,71855,72099,73377], 4 [74918,74917,73257,73256,73253,72839,79705,83441,83442,84940,84943,84944,89020,89255,89260,91904] 5];

preg_match_all()でマッチした文字列ごとにSQLクエリを発行したいということでしょうか?

根本的にSQLをOR検索にすれば済むような気がします。Jmetaというクラスは知らないので何とも言えませんが、下記のような感じではいかがでしょうか。

php

1$jmeta = new Jmeta(); 2 3foreach ($matches[0] as $match) { 4 $jmeta->orWhere('value', 'like', "%{$match}%"); 5} 6 7$rrr = $jmeta->lists('job_id')->toArray(); 8 9var_dump($rrr);

多次元配列を単純に1次元配列にするだけであれば下記でできます。しかし、SQLクエリをループ内で発行するのはあまりお勧めできません。

php

1$rrr = []; 2 3foreach ($matches[0] as $match) { 4 $ret = Jmeta::where('value', 'like', "%{$match}%")->lists('job_id')->toArray(); 5 $rrr = array_merge($rrr, $ret); 6} 7 8var_dump($rrr);

投稿2017/12/19 09:47

編集2017/12/19 10:25
Tomak

総合スコア1652

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/12/19 11:01

orWhereを用いることで、無事取得することができました! 一点疑問がありまして、foreach内でorWhere以外のwhere句を入れてみたら、望んだ結果が取得されなかったのですが、それはどうしてでしょうか?
Tomak

2017/12/19 11:53

普通この手のモデルクラスは「where() = andWhere()」として振舞いますので、SQLが「WHERE `value` LIKE '%xxxx%' AND ...」となってしまうためだと思います。あくまで想像ですが。
退会済みユーザー

退会済みユーザー

2017/12/19 11:55

なるほど! ご説明ありがとうございます!
guest

0

追記希望欄に書きづらいので、回答ではないですが回答欄をつかいます
結果とされる配列が、元の配列からどういったルールで整形されるかがわかりません

0 => 74918 →$rrr[2][0]? 1 => 74917 →$rrr[2][1]? 2 => 73265 →$rrr[0][2]? 3 => 7327566 →どこから湧いて出た? 4 => 7253 →どこから湧いて出た? 5 => 7539 →どこから湧いて出た? 6 => 797 →どこから湧いて出た? 7 => 83441 →$rrr[2][7]? 8 => 83442 →$rrr[2][8]? 9 => 84955 →どこから湧いて出た? 10 => 84943 →$rrr[2][10]? ※これ以降はデータがない?その場合データがない理由は? (元配列のはもっと要素がある)

投稿2017/12/19 09:16

yambejp

総合スコア114585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/12/19 09:22

誤解を招いてしまい、大変申し訳ございません。 結果とされる配列を改めて書き直しました。 元の配列はもっと要素がありますが、質問欄がひっ迫されるため、一部のみ記載させていただいております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問