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

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

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

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

Q&A

解決済

1回答

818閲覧

PHP|変数を使ったfunctionと繰り返しについて

hati3693

総合スコア24

PHP

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

0グッド

0クリップ

投稿2018/10/17 05:49

PHPを勉強中です。
こちらで何度か質問したり色々参考にしてディレクトリ内の最新画像とテキストを表示させるものを作ったのですが、現時点では3回同じようなことを書いてます。これをforeachやwhileを使って3回繰り返すプログラムに書き変えたいのですがどのように書けばいいでしょうか。

やりたいこと
コードの簡略化

functionに変数使っていいのか、複数のforeachを使えるのか、そもそもこの変数の使い方って合っているのかどうか、検索してもなかなか思うような答えにつなげることができませんでした。もし違う書き方があれば教えてもらえると助かります。
※変数名や階層は少し変えてるのでどこか間違ってたらすみません

PHP

1//テキスト 2$text1 = file_get_contents("../text1.txt");//テキスト表示 3$text2 = file_get_contents("../text2.txt"); 4$text3 = file_get_contents("../text3.txt"); 5 6//画像 7function display_img($path){//「display_img」関数定義 8$path = "img1/"; 9$dir = __DIR__ .$path; 10 11$filesarray = array();//ディレクトリを開いて中身をソート 12 if ($handle = opendir($dir)) { 13 while (false !== ($file = readdir($handle))) { 14 if ($file != "." && $file != "..") { 15 $filesarray[filemtime( $dir.$file )] = $file; 16 } 17 } 18 closedir($handle); 19 } 20 ksort($filesarray); 21 if ($handle = opendir($dir)) { //画像表示 22 foreach($filesarray as $file){ 23 global $landscapeimg; 24 $landscapeimg = "<img src='".$dir.$file."' width='100%' />"; 25 } 26 closedir($handle); 27 } 28}

HTML

1<div> 2 <?php 3 display_img($dir,$path);//display_img実行 4 echo $displayimg;//img1最新画像を表示 ?> 5 <p><?php echo h($text1);//text1表示 ?></p> 6</div> 7<div> 8 <?php 9 $path = "img2/";//パスを変更 10 $dir = __DIR__ .$path; 11 display_img($dir,$path)//display_img実行; 12 ?> 13 <?php echo $displayimg;//img2最新画像を表示 ?> 14 <p><?php echo h($text2);//text2表示 ?></p> 15</div> 16<div> 17 <?php 18 $path = "img3/";//パスを変更 19 $dir = __DIR__ .$path; 20 display_img($dir,$path)//display_img実行; 21 ?> 22 <?php echo $displayimg;//img3最新画像を表示 ?> 23 <p><?php echo h($text3);//text3表示 ?></p> 24</div>

イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

foreachなのであれば配列でファイル名のリストを持てばできますし、
whileよりもループカウンタ持ってるforの方が良いでしょう。

※ヒントプログラムなので参考に自身でやってみてください。

forでの例

php

1for($i=1;$i<=3;$i++){ 2 $text = file_get_contents("../text{$i}.txt"); 3 $path = "img{$i}/"; 4 echo <<<EOF 5<div id="area{$i}"> 6text:{$text}<br /> 7path:{$path} 8</div> 9EOF; 10}

display_img()に$path渡されていますが、その関数冒頭でimg1にpathを上書きしているので引数の意味がなくなってます。

投稿2018/10/17 05:59

m.ts10806

総合スコア80850

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

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

hati3693

2018/10/18 04:35

参考にしてやってみたところうまくいきました! <?php for($i=1;$i<=3;$i++){ $text = file_get_contents("../text/text{$i}.txt"); $path = "img{$i}/"; $dir = "../{$path}"; display_img($dir,$path); echo <<<EOF <div>//繰り返し $displayimg//画像 {$text}<br>//テキスト </div> EOF; }//繰り返しEND ?> forの使い道がいまいちわかっていなかったのですが、すごく便利だと知りました。 大変参考になりました!ありがとうございます。
m.ts10806

2018/10/18 04:38

なんでもかんでもforではなく適材適所使い分けてくださいね。 どれでも同じようにはできますので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問