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

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

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

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

PHP

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

Laravel 5

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

1734閲覧

phpのforeachでどう処理しているか理解できない

darichia

総合スコア13

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

PHP

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

Laravel 5

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

1クリップ

投稿2018/03/09 05:02

編集2018/03/09 05:19

悩んでること、内容

ソースを読んでもどのような処理をしているか理解できないため、教えて欲しいです。

変数にsessionを使った処理を代入しています。
sessionで変数にデフォルト値を指定しました。(ここもあっているか不安です。)
その後にforeachで配列にsessionが入っている変数を下記ソースのように指定しました。
これはどのような処理をしているのでしょうか?

該当のソースコード

php

1$id = $request->input('deletecheck', '');              //deletecheck=チェックボックスにチェックを入れたときに、値に対応するsqlに保存されているid番号 2$sql = ''; 3$user = session('user', array());            //'user'にarray()を入れてデフォルト値にする。 4$del_data = array(); 5$sql = 'update bangumi_mst set delete_flg = 1, ' 6 . 'modified_by = ?, modified = GETDATE() where id = ?';  //modified_by=修正者、modified=修正日 7 8foreach ($id as $key => $val) { 9 $del_data = array( 10 $user['name'],   //ここが理解できません。nameというのはログインユーザみたいなものです。 11 $val, 12 ); 13 if (DB::update($sql, $del_data) != 1) { 14 throw new Exception('update error'); 15 } 16}

私なりに考えた解釈

$user=修正者($sqlに入っている「modified_by = ?」の?に該当する。)上で$userにはデフォルト値でarray()が設定されているので$userには配列が入る。なので['name']を指定しているということは、渡ってきたログインユーザの値が入る。

と、投げやりな感じで考えたのでなんだかすっきりしません。
いろいろ調べたのですが答えが見つからなかったので教えてください。

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

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

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

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

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

m.ts10806

2018/03/09 05:06

foreach にかけられている$idってどこからくるもので何が入っているのでしょうか。
m.ts10806

2018/03/09 05:09 編集

と、いうか自身が書いたソースではないんですか?「指定しました」とありますがその後に「どのような処理をしているのでしょうか?」とあるのが疑問です。どこからから引っ張ってきたソースなのであれば参照先・出展先も明記してください。
darichia

2018/03/09 05:22

ソース付け足しました。自分で書いたものですが、会社の上司に教わりながら書きました。ですが理解できずにいたので質問いたしました。説明足らずで申し訳ありませんがご教示お願い致します。
m.ts10806

2018/03/09 05:24

うーん良くないですね。教わりながらでも意味を理解しながら教わるのと、ただ書くのとでは今後の理解度や成長度に大きく関わります。
m.ts10806

2018/03/09 05:25

足りない部分を想像して補完して回答するのは簡単ですが・・・。
darichia

2018/03/09 05:27

私もいけないと思い今解読をしている最中です。ですが、ここだけ考えても理解できませんでした...ぜひ教えてください。
m.ts10806

2018/03/09 05:31

その上司にどこまで聞くことができるのでしょうか?session()、DB::update()、$request->input()はPHPデフォルトで用意されている関数にはありませんし、何かしらのフレームワーク(ミニマム・オレオレ含めて)であればどんなものを利用しているかは、これだけでは分かりませんし。
darichia

2018/03/09 05:34

laravelを使用しています。
m.ts10806

2018/03/09 05:36

失礼しました。タグにありましたね。session()についても了解です。
guest

回答3

0

Laravelなのに何このコード…。
array()とかSQLを直接書いてるとかあまりにもひどすぎてどうしようもないのでは…。

どこか別の場所でセッションに設定

session(['user' => [ 'name' => 'foo', ]]);

これは設定しているのではなく取得。array()は上で設定してなかった場合に使われるデフォルト。

$user = session('user', array());

設定してれば$userは['name' => 'foo']なので$user['name']はこれを使っているだけ。

そもそもLaravelでこんな作りしてるのがおかしいけど。
普通に作ればユーザー情報はauth()->user()から取得して使う。
Laravel使っててもこれとか他人のプロジェクトには関われないな…。

投稿2018/03/09 05:42

kawax

総合スコア10377

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

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

m.ts10806

2018/03/09 05:46

私も同じこと思いました^^; もう少しマニュアル読み込むなりプログラミングとして効率的な書き方やフレームワーク機能の活用方法を学んだりした方が良さそうですよね。
darichia

2018/03/09 05:47

phpもまだまだ理解していないのにlaravelは早すぎたのかもしれません。これからもっと勉強して頑張ります!
guest

0

ライブラリ次第ですが、おそらく$userにログインユーザーの情報が入っていて
$user["name"]とIDの組み合わせがDBの権限とリンクしている
その上でユーザーによるDBのupdate権限をチェックし1でない
つまりtrueじゃない=update権限をもっていない・・・のであれば
例外「update error」を発生させて処理をとばしている
と考えればいいでしょう。

通常はupdate権限はユーザーにつけるので$idを比較対象にいれるはどうかと思います
実際にはレコードごとに作成者IDをつけて自分の作成したレコードは
updateやdeleteができるようにし、あとは管理者グループをつくっておいて
ユーザーIDが管理者グループにいれば更新可能とするような管理方法でしょう
レコードごとに何個も更新・削除権限を細かくつけるのは煩雑ですしね

投稿2018/03/09 05:31

編集2018/03/09 05:36
yambejp

総合スコア114572

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

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

darichia

2018/03/09 05:48

自分の考えと照らし合わせてみたらすこし理解しました。教えていただきありがとうございます。
guest

0

ベストアンサー

おおよそ質問者さんの想定している通りと思います。
Laravelの提供している機能なので、そちらのマニュアルを読まれた方が理解が進むと思います。

マニュアルを読んでも理解が進まない場合は、フレームワークのコア部分を読み進めていくと良いのではないでしょうか。

投稿2018/03/09 05:40

編集2018/03/09 05:42
m.ts10806

総合スコア80765

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

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

darichia

2018/03/09 05:45

いろいろとやさしく教えていただきありがとうございます。自分の考えていることに全く自身が無かったので、安心しました。
m.ts10806

2018/03/09 05:49

既に指摘されているようにLaravelというフレームワークを使っているのに機能を使いこなせていません。 マニュアルやQiitaの優良記事などを読み込み、最大限使えるようにすべきと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問