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

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

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

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

Q&A

5回答

730閲覧

phpのfor文がうまく描けません。。。

cdyoshi

総合スコア4

PHP

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

0グッド

0クリップ

投稿2020/02/02 01:56

前提・実現したいこと

はじめまして。
セッション付きのフォームを作成しています。
phpのfor文で、文法的な部分でどうしてもうまく反映されず、質問をさせていただきます。
私はPHPにはあまり強くないWebクリエイターです。

下記のような結果が欲しいのですが、これをfor文にはめるにはどのように記述をするのでしょうか。

1,2,3のようなカウントが、実際には10ぐらいあり、
手入力で頑張れない事もないのですが、for文で何とか出来るのでは、と思っています。

phpのバージョンは7.2です。

初歩的な事かもしれませんが、ご享受いただければ幸いです。
宜しくお願い致します。

該当のソースコード(欲しい結果)

<?php $_SESSION['type1'] = $type1; $_SESSION['size1'] = $size1; $_SESSION['quantity1'] = $quantity1; $_SESSION['type2'] = $type2; $_SESSION['size2'] = $size2; $_SESSION['quantity2'] = $quantity2; $_SESSION['type3'] = $type3; $_SESSION['size3'] = $size3; $_SESSION['quantity3'] = $quantity3; ?>

試したこと(for文にはめてみた)

下記のような構文になるのかな、と思い作ってみましたが、思うような値が返ってきません。

<?php function forTest(){ for($j=1;$j<4;$j++){ $_SESSION['type$j'] = $type.$j; $_SESSION['size$j'] = $size.$j; $_SESSION['quantity$j'] = $quantity.$j; } } forTest(); ?>

検証は、フォームを実際に動かしてみて値が返ってくるかどうかでチェックしていますが、返ってきません。

phpの構文の中に変数?を入れる部分がどうしても解決できませんでした。

すみませんが教えていただければ有難いです。
宜しくお願い致します。

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

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

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

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

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

guest

回答5

0

「$type.$j」が何を指すか分かって書いていますか?

$typeの値と$jの値をただくっつけたものです。

PHP

1<?php 2$type1 = 'aaa'; 3$type2 = 'bbb'; 4$type3 = 'ccc'; 5 6for ($i = 1; $i <= 3; $i++) { 7 echo ${'type' . strval($i)}; 8}

・結果

aaabbbccc

投稿2020/02/02 12:29

takepan1973

総合スコア821

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

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

0

そもそもクォーテーション内における変数展開の時点でミスってます。

この手の質問も多いですし、言語的に基本的なところなのできっちりおさえましょう。
teratail: [クォーテーション tag:PHP] の検索結果: 265件

投稿2020/02/02 08:15

m.ts10806

総合スコア80854

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

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

0

$_SESSION['type'.$j]

ただ、あんまりきれいな実装ではないです。

$_SESSION[$item_no]['type']

みたいなデータの持ち方のほうが、読みやすいかと

投稿2020/02/02 02:03

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

cdyoshi

2020/02/02 03:42

ありがとうございます。 試してみたところ、まだうまくいかないのですが、 一点疑問点があります。 「$type1」 を取得したい場合、for文に入れた時の記述は「$type.$j;」という記述は、これで良いのでしょうか。
guest

0

compact を使えば比較的きれいに記述可能です。

<?php $type1 = 'type-1'; $size1 = 'size-1'; $quantity1 = 'quantity-1'; $type2 = 'type-2'; $size2 = 'size-2'; $quantity2 = 'quantity-2'; $type3 = 'type-3'; $size3 = 'size-3'; $quantity3 = 'quantity-3'; var_dump(compact(array_map(function ($index) { return ["type${index}", "size${index}", "quantity${index}"]; }, [1, 2, 3])));

array(9) { ["type1"]=> string(6) "type-1" ["size1"]=> string(6) "size-1" ["quantity1"]=> string(10) "quantity-1" ["type2"]=> string(6) "type-2" ["size2"]=> string(6) "size-2" ["quantity2"]=> string(10) "quantity-2" ["type3"]=> string(6) "type-3" ["size3"]=> string(6) "size-3" ["quantity3"]=> string(10) "quantity-3" }

foreach で回せば欲しい結果になります。

foreach ( compact(array_map(function ($index) { return ["type${index}", "size${index}", "quantity${index}"]; }, [1, 2, 3])) as $key => $value ) { $_SESSION[$key] = $value; }

投稿2020/02/04 12:20

Technote

総合スコア63

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

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

0

初めから配列で受け取りましょう。(インデックス付きに変更しては危険なコードを使うことになります。)

以下バッドノウハウ

コードイメージfor で作成及び eval を実行する。
危険なコードなので当方では実行してません。イメージです。

function forTest(){ for($j=1;$j<4;$j++){ eval('$_SESSION["type' .$j.'"] = $type' .$j.';'); eval('$_SESSION["size' .$j.'"] = $size' .$j.';'); eval('$_SESSION["quantity'.$j.'"] = $quantity' .$j.';'); } }

警告

eval() は非常に危険な言語構造です。 というのも、任意の PHP コードを実行できてしまうからです。 これを使うことはおすすめしません。 いろいろ検討した結果どうしても使わざるを得なくなった場合は、細心の注意を払って使いましょう。 ユーザーから受け取ったデータをそのまま渡してはいけません。 渡す前に、適切な検証が必要です。

投稿2020/02/02 02:08

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

cdyoshi

2020/02/02 03:39

ありがとうございます。 evalは、できるだけ避けたいと思いますが、参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問