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

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

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

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

配列

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

Q&A

1回答

1253閲覧

PHP 可変変数、配列を冗長的なコードに適用する

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

配列

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

0グッド

0クリップ

投稿2018/03/20 04:58

入力画面と確認画面があり、
確認画面においての出力を
ループを使って簡潔にしようとおもったのですが、
自分の理解がまずいのかなかなか進みません。
コードの使い方も間違っているかもしれませんので
ご指摘お願い致します。

まずは冗長的なコードではあるものの
きちんと動作するものがこちらです。

入力画面↓

php

1<head> 2 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 3</head> 4 5<body> 6 <form action="kakunin.php" name="form" method="post"> 7 <table> 8 <tr> 9 <td> 10 <select name="transport1"> 11 <?php 12 $traline1 = array('-' => '0','地下鉄' => '地下鉄','JR在来線' => 'JR在来線','JR新幹線' => 'JR新幹線','阪急' => '阪急','京阪' => '京阪'); 13 foreach($traline1 as $k => $v) { 14 print("<option value='$k'>$k</option>"); 15 } 16 ?> 17 </select> 18 </td> 19 <td> 20 <input type="text" name="tprice1"> 21 </td> 22 <td> 23 <select name="division1"> 24 <?php 25 $divline1 = array('-' => '0','片道' => '1','往復' => '2'); 26 foreach($divline1 as $k => $v) { 27// print sprintf("<option value='%s'>%s</option>\n", $k ,$v);//文字列表現 28 print("<option value='$k'>$k</option>"); 29 } 30 ?> 31 </select> 32 </td> 33 <td> 34 <input disabled type="text" name="ttotal1" value="0"> 35 </td> 36 </tr> 37 <tr> 38 <td> 39 <select name="transport2"> 40 <?php 41 $traline2 = array('-' => '0','地下鉄' => '地下鉄','JR在来線' => 'JR在来線','JR新幹線' => 'JR新幹線','阪急' => '阪急','京阪' => '京阪'); 42 foreach($traline2 as $k => $v) { 43 print("<option value='$k'>$k</option>"); 44 } 45 ?> 46 </select> 47 </td> 48 <td> 49 <input type="text" name="tprice2"> 50 </td> 51 <td> 52 <select name="division2"> 53 <?php 54 $divline2 = array('-' => '0','片道' => '1','往復' => '2'); 55 foreach($divline2 as $k => $v) { 56// print sprintf("<option value='%s'>%s</option>\n", $k ,$v);//文字列表現 57 print("<option value='$k'>$k</option>"); 58 } 59 ?> 60 </select> 61 </td> 62 <td> 63 <input disabled type="text" name="ttotal2" value="0"> 64 </td> 65 </tr> 66 <tr> 67 <td> 68 <select name="transport3"> 69 <?php 70 $traline3 = array('-' => '0','地下鉄' => '地下鉄','JR在来線' => 'JR在来線','JR新幹線' => 'JR新幹線','阪急' => '阪急','京阪' => '京阪'); 71 foreach($traline3 as $k => $v) { 72 print("<option value='$k'>$k</option>"); 73 } 74 ?> 75 </select> 76 </td> 77 <td> 78 <input type="text" name="tprice3"> 79 </td> 80 <td> 81 <select name="division3"> 82 <?php 83 $divline3 = array('-' => '0','片道' => '1','往復' => '2'); 84 foreach($divline3 as $k => $v) { 85// print sprintf("<option value='%s'>%s</option>\n", $k ,$v);//文字列表現 86 print("<option value='$k'>$k</option>"); 87 } 88 ?> 89 </select> 90 </td> 91 <td> 92 <input disabled type="text" name="ttotal3" value="0"> 93 </td> 94 </tr> 95 </table> 96 <input type="submit" value="確認" class="btn"> 97 </form> 98</body>

確認画面↓

php

1<table> 2<?php 3header('Content-Type: text/html; charset=UTF-8'); 4error_reporting(E_ALL & ~E_NOTICE); 5$tra1=$_POST['transport1']; 6$tra2=$_POST['transport2']; 7$tra3=$_POST['transport3']; 8$tpri1=$_POST['tprice1']; 9$tpri2=$_POST['tprice2']; 10$tpri3=$_POST['tprice3']; 11$div1=$_POST['division1']; 12$div2=$_POST['division2']; 13$div3=$_POST['division3']; 14$ttotal1 = $tpri1; 15$ttotal2 = $tpri2; 16$ttotal3 = $tpri3; 17$ttotal = $ttotal1 + $ttotal2 + $ttotal3; 18if($tra1=='0' || $tpri1=='' || $div1=='0'){ 19 $trim = trim($ttotal1); 20} 21else{ 22 print'<tr><td>'; 23 print$tra1; 24 print'</td><td>'; 25 print$tpri1; 26 print'</td><td>'; 27 print$div1; 28 print'</td><td>'; 29 print$ttotal1; 30 print'円</td></tr>'; 31} 32if($tra2=='0' || $tpri2=='' || $div2=='0'){ 33 $trim = trim($ttotal2); 34} 35else{ 36 print'<tr><td>'; 37 print$tra2; 38 print'</td><td>'; 39 print$tpri2; 40 print'</td><td>'; 41 print$div2; 42 print'</td><td>'; 43 print$ttotal2; 44 print'円</td></tr>'; 45} 46if($tra3=='0' || $tpri3=='' || $div3=='0'){ 47 $trim = trim($ttotal3); 48} 49else{ 50 print'<tr><td>'; 51 print$tra3; 52 print'</td><td>'; 53 print$tpri3; 54 print'</td><td>'; 55 print$div3; 56 print'</td><td>'; 57 print$ttotal3; 58 print'円</td></tr>'; 59} 60?> 61</table>

実践した確認画面↓

php

1<table> 2<?php 3header('Content-Type: text/html; charset=UTF-8'); 4error_reporting(E_ALL & ~E_NOTICE); 5$traarr = array('tra1' => 'transport1','tra2' => 'transport2','tra3' => 'transport3'); 6foreach($traarr as $k => $v){ 7 $k=$_POST['$v']; 8} 9for($i=1;$i<=3;$i++){ 10$tra{$i}=$_POST['transport{$i}']; 11$tpri{$i}=$_POST['tprice{$i}']; 12$div{$i}=$_POST['division{$i}']; 13$ttotal{i} = $tpri{$i}; 14$_POST["ttotal{$i}"] = $_POST["tpri{$i}"]; 15} 16if($_POST[Submit]){ 17$i=0;$i<=5;$i++){ 18 if($_POST["tra{$i}"]=="0" || $_POST["tpri{$i}"]=='' || $_POST["div{$i}"]=='0'){ 19 $trim = trim($ttotal{$i}); 20 } 21 else{ 22 print'<tr>'; 23 print'<td>交通機関:'; 24 print$_POST["tra{$i}"]; 25 print'</td>'; 26 print'<td>単価:'; 27 print$_POST["tpri{$i}"]; 28 print'</td>'; 29 print'<td>区間:'; 30 print$_POST["div{$i}"]; 31 print'</td>'; 32 print'<td>合計:'; 33 print$_POST["ttotal{$i}"]; 34 print'円</td>'; 35 print'</tr>'; 36 } 37 } 38} 39?> 40</table>

もしかすると使い方を間違っているのではとは思うのですが、
何をどう間違えているのかわかりません。
宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

長いのでざっとしか見てないけど、そもそも何が質問なのか分かりません。
出力された html が意図と違うのであれば、そこを示したほうが良いかと。

とりあえず、

php

1foreach($traarr as $k => $v){ 2 $k=$_POST['$v']; 3}

php

1foreach($traarr as $k => $v){ 2 $k=$_POST[$v]; 3}

とかじゃないかなぁ。

投稿2018/03/20 05:04

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/03/20 05:22

文字使いを気にするあまり分かりづらくなってしまい申し訳ありません。 動作はするのですが、今のところ決め打ちで行数や変数を作っているので、 いわゆるコードが長くて大変という状態から、 わかりやすく、なおかつ編集もしやすくするためにループを使いたいです。 しかし使い方が間違っているのか上手くいきません。
退会済みユーザー

退会済みユーザー

2018/03/20 05:46

指摘した箇所以外も、いろいろ変数がおかしいですね。 <?php for($i=1;$i<=3;$i++){ $tmp = 'tra'.$i; $$tmp ="transport{$i}"; } var_export(get_defined_vars()); みたいな形じゃないと、突っ込めないんじゃないかなぁ。。。 普通に配列使ったほうがいいと思いますよ。 <?php for($i=1;$i<=3;$i++){ $tra[$i] ="transport{$i}"; }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問