
書籍を見ていると初期化した配列の中身は何もない状態にもかかわらず foreach を使うときに foreach ($line as $i => $text) のようにいきなり連想配列のような指定を見ることがあります。私の理解力が足りないので、質問の仕方が間違えているのかもしれませんが、まずこういう書き方は合っているのでしょうか?あと、こういう場合は $text に何が入るのでしょうか?
補足すると、これは数行のテキストが書かれたファイルを読み込んで0行目をタイトルとして表示させ、1行目以降を本文として読み込んで表示するというものなのですが書籍を見ても $text は宣言されていません。
foreach ($line as $i => $text) { if ($i == 0) { echo '<h2>' .$text '</h2>'; } else { $body .= $text . '<br>'; } }
このコードの前には
$fp = fopen("info.text" , "r"); $line = array(); $body = '';
と、ただの array() が用意されているだけです。
何をする処理なのかわかっている私には foreach の内容が「i 行目の $text なんだろうな」とわかるのですが、空の配列に対して途中から連想配列の振る舞いをさせることは当たり前なのでしょうか?そのときの中身や動きが全く理解できません。
妙な質問かもしれませんが、アドバイスよろしくお願いいたします。
追記します。テキストファイルの中身を表示するコードです。
PHP
1<?php 2 $fp = fopen("info.txt", "r"); 3 $line = []; 4 $body = ''; 5 6 if ($fp) { 7 while(!feof($fp)) { 8 $line[] = fgets($fp); 9 } 10 fclose($fp); 11 } 12 ?> 13 14<!doctype html> 15<html lang="ja"> 16 <head> 17 <body> 18 <?php 19 if (count($line) > 0) { 20 foreach ($line as $i => $text) { 21 if ($i == 0) { 22 echo '<h2>' . $text . '</h2>'; 23 } else { 24 $body .= $text . '<br>'; 25 } 26 } 27 } else { 28 $body ='お知らせはありません'; 29 } 30 echo '<p>' . $body . '</p>'; 31 ?> 32 </body> 33 </head> 34</html>


回答2件
あなたの回答
tips
プレビュー