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

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

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

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

PHP

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

Q&A

2回答

1505閲覧

次の配列のコードをもっと簡潔に書きたいのですが、どなたかご教授願えないでしょうか。

退会済みユーザー

退会済みユーザー

総合スコア0

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

PHP

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

0グッド

0クリップ

投稿2018/06/01 07:31

はじめまして。

for文を用いて以下のようにコードを打ったのですが、簡潔にしようとするとエラーが発生します。どなたかご指摘お願いできますでしょうか。
よろしくお願いします。

該当のソースコード

php

1 <?php 2$pdata["code"]["A0001"][0] = "A0001"; 3$pdata["code"]["A0001"][1] = "白菜(1玉)"; 4$pdata["code"]["A0001"][2]= 298; 5$pdata["code"]["K0001"][0] = "K0001"; 6$pdata["code"]["K0001"][1] = "いわし(5尾)"; 7$pdata["code"]["K0001"][2] = 258; 8$pdata["code"]["A0002"][0] = "A0002"; 9$pdata["code"]["A0002"][1] = "九条葱(1パック)"; 10$pdata["code"]["A0002"][2] = 258; 11$pdata["code"]["A0003"][0] = "A0003"; 12$pdata["code"]["A0003"][1] = "サツマイモ(1袋)"; 13$pdata["code"]["A0003"][2] = 180; 14$pdata["code"]["K0002"][0] = "K0002"; 15$pdata["code"]["K0002"][1] = "きびなご(1皿)"; 16$pdata["code"]["K0002"][2] = 180; 17 18echo "<table>"; 19echo " 20<tr> 21<td>code</td> 22<td>product</td> 23<td>price</td> 24</tr> 25"; 26 27for($i=0;$i<count($pdata);$i++){ 28 29echo " 30<tr> 31<td>".$pdata["code"]["A0001"][0]."</td> 32<td>".$pdata["code"]["A0001"][1]."</td> 33<td>".$pdata["code"]["A0001"][2]."</td> 34</tr> 35"; 36} 37"</table>"; 38 39for($i=0;$i<count($pdata);$i++){ 40 41echo " 42<tr> 43<td>".$pdata["code"]["K0001"][0]."</td> 44<td>".$pdata["code"]["K0001"][1]."</td> 45<td>".$pdata["code"]["K0001"][2]."</td> 46</tr> 47"; 48} 49"</table>"; 50 51for($i=0;$i<count($pdata);$i++){ 52 53echo " 54<tr> 55<td>".$pdata["code"]["A0002"][0]."</td> 56<td>".$pdata["code"]["A0002"][1]."</td> 57<td>".$pdata["code"]["A0002"][2]."</td> 58</tr> 59"; 60} 61"</table>"; 62 63for($i=0;$i<count($pdata);$i++){ 64 65echo " 66<tr> 67<td>".$pdata["code"]["A0003"][0]."</td> 68<td>".$pdata["code"]["A0003"][1]."</td> 69<td>".$pdata["code"]["A0003"][2]."</td> 70</tr> 71"; 72} 73"</table>"; 74 75for($i=0;$i<count($pdata);$i++){ 76 77echo " 78<tr> 79<td>".$pdata["code"]["K0002"][0]."</td> 80<td>".$pdata["code"]["K0002"][1]."</td> 81<td>".$pdata["code"]["K0002"][2]."</td> 82</tr> 83"; 84} 85"</table>"; 86?> 87

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

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

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

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

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

mather

2018/06/01 07:34

「簡潔にしようとする」とはどう簡潔にしたいと考えているのか書いてください。「エラーが発生します」のエラーを具体的に提示してください。
motuo

2018/06/01 07:36 編集

手元で動かすと動いてしまいました。何をしようとして、どんなエラーが出たのでしょうか?エラーが出たコードとメッセージをセットにして質問すると回答が得られやすいと思いますが…
退会済みユーザー

退会済みユーザー

2018/06/01 08:41 編集

せっかく丁寧に回答をつけても、退会してしまうんですね?
ttyp03

2018/06/01 08:20

普通に動きますなあ。動きの良し悪しは見てないけど、少なくともエラーにはならない。
imprezza

2018/06/07 07:47

なんとも…こう…配列の持ち方にモヤモヤしたものを感じるんですよねぇ…後で自分で消化独習してみよう
guest

回答2

0

スマートな回答が既に出ているところで敢えて回答をつけます。
理解の助けになるように。

php

1<?php 2 3$pdata["code"]["A0001"][0] = "A0001"; 4$pdata["code"]["A0001"][1] = "白菜(1玉)"; 5$pdata["code"]["A0001"][2]= 298; 6$pdata["code"]["K0001"][0] = "K0001"; 7$pdata["code"]["K0001"][1] = "いわし(5尾)"; 8$pdata["code"]["K0001"][2] = 258; 9$pdata["code"]["A0002"][0] = "A0002"; 10$pdata["code"]["A0002"][1] = "九条葱(1パック)"; 11$pdata["code"]["A0002"][2] = 258; 12$pdata["code"]["A0003"][0] = "A0003"; 13$pdata["code"]["A0003"][1] = "サツマイモ(1袋)"; 14$pdata["code"]["A0003"][2] = 180; 15$pdata["code"]["K0002"][0] = "K0002"; 16$pdata["code"]["K0002"][1] = "きびなご(1皿)"; 17$pdata["code"]["K0002"][2] = 180; 18 19echo count($pdata) . PHP_EOL; 20echo count($pdata["code"]) . PHP_EOL; 21foreach ($pdata["code"] as $arr) { 22 echo $arr[0] . PHP_EOL; 23 echo $arr[1] . PHP_EOL; 24 echo $arr[2] . PHP_EOL; 25}

《実行結果》
実行結果

$pdataのキーはcodeしかないので、count($pdata)は1になります。
$pdata["code"]のキーは定義した分あるので、count($pdata["code"])はこの場合5になります。

for()ループよりもforeach()ループのほうが、
カウンター変数を管理しなくて良く、
配列を順になぞって処理を行うのにラクです。

複数行出力するecho文はヒアドキュメント構文を使ったほうが見やすいです。
以上を踏まえて、

php

1<?php 2 3$pdata["code"]["A0001"][0] = "A0001"; 4$pdata["code"]["A0001"][1] = "白菜(1玉)"; 5$pdata["code"]["A0001"][2]= 298; 6$pdata["code"]["K0001"][0] = "K0001"; 7$pdata["code"]["K0001"][1] = "いわし(5尾)"; 8$pdata["code"]["K0001"][2] = 258; 9$pdata["code"]["A0002"][0] = "A0002"; 10$pdata["code"]["A0002"][1] = "九条葱(1パック)"; 11$pdata["code"]["A0002"][2] = 258; 12$pdata["code"]["A0003"][0] = "A0003"; 13$pdata["code"]["A0003"][1] = "サツマイモ(1袋)"; 14$pdata["code"]["A0003"][2] = 180; 15$pdata["code"]["K0002"][0] = "K0002"; 16$pdata["code"]["K0002"][1] = "きびなご(1皿)"; 17$pdata["code"]["K0002"][2] = 180; 18 19echo <<<EOT 20<table> 21 22EOT; 23foreach ($pdata["code"] as $arr) { 24 echo <<<EOT 25<tr> 26 <td>${arr[0]}</td> 27 <td>${arr[1]}</td> 28 <td>${arr[2]}</td> 29</tr> 30 31EOT; 32} 33echo <<<EOT 34</table> 35 36EOT;

《実行結果》
実行結果2

また、phpからの離脱を組み合わせることも出来ます。

php

1<?php 2 3$pdata["code"]["A0001"][0] = "A0001"; 4$pdata["code"]["A0001"][1] = "白菜(1玉)"; 5$pdata["code"]["A0001"][2]= 298; 6$pdata["code"]["K0001"][0] = "K0001"; 7$pdata["code"]["K0001"][1] = "いわし(5尾)"; 8$pdata["code"]["K0001"][2] = 258; 9$pdata["code"]["A0002"][0] = "A0002"; 10$pdata["code"]["A0002"][1] = "九条葱(1パック)"; 11$pdata["code"]["A0002"][2] = 258; 12$pdata["code"]["A0003"][0] = "A0003"; 13$pdata["code"]["A0003"][1] = "サツマイモ(1袋)"; 14$pdata["code"]["A0003"][2] = 180; 15$pdata["code"]["K0002"][0] = "K0002"; 16$pdata["code"]["K0002"][1] = "きびなご(1皿)"; 17$pdata["code"]["K0002"][2] = 180; 18 19?> 20<table> 21<?php 22foreach ($pdata["code"] as $arr) { 23 echo <<<EOT 24<tr> 25 <td>${arr[0]}</td> 26 <td>${arr[1]}</td> 27 <td>${arr[2]}</td> 28</tr> 29 30EOT; 31} 32?> 33</table>

</tr>」と「EOT;」との間に空の行があるのは、
それがないと改行コードがつかなくて、「</tr>」と次の「<tr>」が同じ行に出力されてしまうからです。

加えて、単純に0,1,2の順に出力するだけであれば、
それこそfor()ループを使うこともできますが、
たかだか3件だしコードが増えて見た目のシンプルさが損なわれるから今回はなしで。

投稿2018/06/01 08:31

編集2018/06/01 08:40
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

たとえばこう?

PHP

1$pdata["code"]["A0001"][0] = "A0001"; 2$pdata["code"]["A0001"][1] = "白菜(1玉)"; 3$pdata["code"]["A0001"][2]= 298; 4$pdata["code"]["K0001"][0] = "K0001"; 5$pdata["code"]["K0001"][1] = "いわし(5尾)"; 6$pdata["code"]["K0001"][2] = 258; 7$pdata["code"]["A0002"][0] = "A0002"; 8$pdata["code"]["A0002"][1] = "九条葱(1パック)"; 9$pdata["code"]["A0002"][2] = 258; 10$pdata["code"]["A0003"][0] = "A0003"; 11$pdata["code"]["A0003"][1] = "サツマイモ(1袋)"; 12$pdata["code"]["A0003"][2] = 180; 13$pdata["code"]["K0002"][0] = "K0002"; 14$pdata["code"]["K0002"][1] = "きびなご(1皿)"; 15$pdata["code"]["K0002"][2] = 180; 16 17echo <<<eof 18<table> 19<tr> 20<td>code</td> 21<td>product</td> 22<td>price</td> 23</tr> 24 25eof; 26foreach($pdata["code"] as $row){ 27echo <<<eof 28<tr> 29 <td>{$row[0]}</td> 30 <td>{$row[1]}</td> 31 <td>{$row[2]}</td> 32</tr> 33 34eof; 35}; 36echo "</table>"; 37

投稿2018/06/01 07:51

yambejp

総合スコア114814

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問