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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

Q&A

解決済

4回答

960閲覧

PHP  配列の値を追加する処理につきまして

yowayowanitohei

総合スコア31

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

0グッド

0クリップ

投稿2021/03/25 08:11

編集2021/03/25 08:18

PHPにて検索画面を作っております。
検索条件が入った配列と検索結果を取得した配列が存在します。

searchList [001,002,003] outputList 0 => array:3 [▼ "id" => "001" "place" => "JAPAN" "name" => "onigiri" ] 1 => array:3 [▼ "id" => "003" "place" => "MEXICO" "name" => "tacos" ]

現在はoutput配列に検索できなかった002が入っていない状態になっているため
下記のように検索順で配列outputに追加したいと考えております。

outputList 0 => array:3 [▼ "id" => "001" "place" => "JAPAN" "name" => "onigiri" ] 1 => array:3 [▼ "id" => "002" "place" => "存在しません" "name" => "存在しません" ] 2 => array:3 [▼ "id" => "003" "place" => "MEXICO" "name" => "tacos" ]

配列同士のIDを比較してなければaddarrayで追加するよう
foreachにforeachを入れておりますが、うまく動かず
スピードが遅くなってしまうためなんとかしたいと考えております。
この場合の記述について良い方法があればお伺いしたいです。

すみませんがどうぞよろしくお願いします。

foreach($Outputlist as $output){   foreach($searchList as $search){  if($output['id'] != $search){  $addArray = ["id"=>"$search[$i]","name"=>"該当なし","place"=>"該当なし", ]; array_splice($Outputlist,$i,0,[$addArray]); } } }

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

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

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

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

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

guest

回答4

0

直接の回答ではないです。
配列のソースが DB なら取得時に意図した配列を作ってしまうのが楽です。
また、出力時に foreach 等で回すと思いますが、その際、入力値と比較して、欠番となっていれば「該当なし」を挿入するのも良くある手です。

投稿2021/03/25 09:13

編集2021/03/25 09:15
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yowayowanitohei

2021/03/25 11:04

ご回答ありがとうございます。 確かに無理くりまわすくらいなら見やすいように根本から直した方が正しいですね。 参考に作り直してみます。
guest

0

もう少しやりたいことを書かないと適切な回答は不可能。
idに00を入れてるような意味不明なことをしている場合、質問以前の段階で間違えていることが多い。

php

1//まずCollectionに。DBから取得したなら元からCollectionのはずだけど。 2$outputList = collect($outputList); 3 4foreach($searchList as $search) { 5 if(! $outputList->contains('id', $search)) { 6 $outputList->push([ 7 'id' => $search, 8 'place' => '存在しません', 9 'name' => '存在しません', 10 ]); 11 }12} 13 14$outputList = $outputList->sortBy('id')->values(); 15 16return view()->with(compact('outputList'));

投稿2021/03/25 10:02

kawax

総合スコア10377

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

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

yowayowanitohei

2021/03/25 11:03

ご指摘ありがとうございます。わかりやすいご解説助かりました。 業務で使用している箇所を書き換えたのですが不足・ミスが目立ちますね。。。($iとか意味不明ですね) 次回以降もまた機会がありましたらどうぞよろしくお願いします。
guest

0

こんな感じでarray_columnを使ってidだけを取得するとループは一つで済みます。
array_columnはメチャ便利な関数なので調べてみるといいです。

PHP

1$OutputList = [ 2 [ 3 "id" => "001", 4 "place" => "JAPAN", 5 "name" => "onigiri", 6 ], 7 [ 8 "id" => "003", 9 "place" => "MEXICO", 10 "name" => "tacos", 11 ] 12]; 13$OutputId = array_column($OutputList,"id"); 14$searchList = ['001','002','003']; 15//var_dump($searchList); 16$i = 1; 17foreach($searchList as $search){ 18 if(!in_array($search,$OutputId,true)){ 19 $addArray = ["id"=>"$searchList[$i]","name"=>"該当なし","place"=>"該当なし"]; 20 array_splice($OutputList,$i,0,[$addArray]); 21 } 22} 23var_dump($OutputList);

投稿2021/03/25 09:08

編集2021/03/25 09:09
FKM

総合スコア3608

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

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

yowayowanitohei

2021/03/25 11:07 編集

array_column...メチャクチャ便利ですね! 直近で一番感動したかもしれません。 拙い質問をもとに詳しいご解説いただきありがとうございます。 またご機会がございましたら、どうぞよろしくお願いします。
guest

0

ベストアンサー

PHP

1$result=array_reduce($searchList,function($x,$y) use($outputList){ 2 $temp=array_filter($outputList,function($z) use($y){ 3 return $z["id"]==$y; 4 }); 5 if(count($temp)==0) $temp[]=["id"=>$y,"place"=>"","name"=>""]; 6 return array_merge($x,$temp); 7},[]); 8var_dump($result);

投稿2021/03/25 08:53

yambejp

総合スコア114572

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

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

yowayowanitohei

2021/03/25 11:07

ご回答(ご解答?)ありがとうございます。 かなりスピードが上がり欲しい結果を得ることができました。 また機会がございましたら、お手数ですがどうぞよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問