fscanf()関数はテキストファイルから1行分のデータを読み込み、それらを指定のフォーマットに従って分割して、分割された個々のデータを指定の変数に代入します。この例では、ファイルハンドル「$fp」から読み込まれた1行のデータは、第2引数で指定された「"%s %s %s %s"」というフォーマットに従って分割されます。このフォーマットの場合、1行の文字列が半角スペースごとに区切られます。
それぞれに区切られたデータは、第3引数以降に列挙された変数に順番に代入されます。この時、変数名の前に「$」と「&」をつけることに注意してください。この例の場合、最初のスペースまでのデータが「$rank」、その次のスペースまでのデータが「$team」に代入されます。データの代入された変数は、通常の変数として扱うことができます。
fscanf()関数は、実行されるたびにファイルポインタを進めます。ファイル内のすべてのデータを読み込み終わるとFalseを返します。fscanf()関数自体の返り値を確認することによって、全データを読み込んだかを判断できます。
<?php header("Content-type: text/html; charset=utf-8"); if(!$fp = @fopen("data/FIFARank.txt", "r")){ echo "ファイルを開けませんでした!"; exit(); } $html = ""; while(fscanf($fp, "%s %s %s %s", $rank, $team, $area, $point)){ $html .= "<tr>"; $html .= "<td>" . $rank . "</td>"; $html .= "<td>" . $team . "</td>"; $html .= "<td>" . $area . "</td>"; $html .= "<td>" . $point . "</td>"; $html .= "</tr>"; } fclose($fp); $html = mb_convert_encoding($html, "utf-8", "shift_jis"); ?> <!DOCTYPE HTML> <html lang="ja-JP"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <table border="1"> <tr> <td>ランク</td><td>チーム</td><td>地域</td><td>ポイント</td> </tr> <?=$html?> </table> </body> </html>