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

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

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

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

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

PHP

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

Q&A

解決済

5回答

1475閲覧

エラーが出てしまいます。正しい書き方を教えて頂きたいです。

退会済みユーザー

退会済みユーザー

総合スコア0

for

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

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

PHP

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

0グッド

0クリップ

投稿2018/05/29 01:01

編集2018/05/29 01:06

前提・実現したいこと

arrayで馬名を格納して以下のように表示したいです。
出走馬は9頭です。
・ディープインパクト
・トウカイテイオー
・スペシャルウィーク
・スーパークリーク
・メジロマックイーン
・ダイユウサク
・オグリキャップ
・ウォッカ
・ダイワスカーレット

「出走馬は9頭です。」の'9'のところもphpで表示し、リスト部分をfor,while,foreachのそれぞれを使用しechoで表示させる。

発生している問題・エラーメッセージ

出走馬は9頭です。
・ディープインパクト
・トウカイテイオー
・スペシャルウィーク
・スーパークリーク
・メジロマックイーン
・ダイユウサク
・オグリキャップ
・ウォッカ
・ダイワスカーレット

Notice: Undefined offset: 9 in C:\xampp\htdocs\php\print4.php on line 7 ・

該当のソースコード

php

1<?php 2$a=array("ディープインパクト","トウカイテイオー","スペシャルウィーク","スーパークリーク","メジロマックイーン","ダイユウサク","オグリキャップ","ウォッカ","ダイワスカーレット"); 3$s=count($a); 4echo "出走馬は".$s."頭です。<br>"; 5 6for($i=0;$i<=count($a);$i++){ 7echo "・".$a[$i],"<br>"; 8} 9 10 ?>

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

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

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

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

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

guest

回答5

0

ベストアンサー

この配列の場合は、$a[0]が「ディープインパクト」、 $a[8]が「ダイワスカーレット」で、count($a)は9です。

記載のソースコードは、0-9のループになっているので、

for($i=0;$i<count($a);$i++){

もしくは

for($i=0;$i<=count($a)-1;$i++){

で、0-8のループにする必要があります。

本筋とそれますが、echoの処理で、「.」と「,」が混在しているのが気になりました。
どちらかに統一しておいた方がいいような気がします。

投稿2018/05/29 01:48

編集2018/05/29 02:02
kszk311

総合スコア3404

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

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

kszk311

2018/05/29 02:08 編集

ちなみにエラーの内容は、「この配列に9番目($a[9])は存在しないよ」という意味です。
退会済みユーザー

退会済みユーザー

2018/05/30 02:34

ご回答ありがとうございました。無事解決いたしました。また機会があればよろしくお願いします。
guest

0

要件を満たすだけならforeach文を使えば良いのではないでしょうか?
これなら「Notice: Undefined offset: 9」のエラーも出ないかと思いますが。

php

1// 中略 2foreach($a as $val){ 3 echo '・'.$val.'<br>'; 4} 5

投稿2018/05/29 02:29

DaisukeMori

総合スコア225

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

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

0

PHP

1for($i=0;$i<=count($a);$i++){

$i は0からはじまり、count($a)、すなわち9になるまでループします。
0,1,2,3,4,5,6,7,8,9
さて、何回まわったでしょう?

投稿2018/05/29 01:05

kazto

総合スコア7196

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

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

0

配列を定形でフォーマットするならimplodeでよいかも
リストはul-liのほうがよいような気がします

PHP

1<?PHP 2$a=["ディープインパクト","トウカイテイオー","スペシャルウィーク","スーパークリーク","メジロマックイーン","ダイユウサク","オグリキャップ","ウォッカ","ダイワスカーレット"]; 3$s=count($a); 4echo "<div>出走馬は".$s."頭です。</div>\n"; 5echo "<ul>\n"; 6echo "<li>".implode("</li>\n<li>",$a)."</li>\n"; 7echo "</ul>\n"; 8

投稿2018/05/29 01:26

yambejp

総合スコア114769

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

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

0

エラーの解決策としては既に出ている通りですが、
配列を扱う上では「その添え字本当に存在する?」というチェックは入れておいた方が良いです。
例えば入力フォームから送信されてきた値はユーザーの入力なので必ず想定の情報が含まれているとは限りません。(htmlはブラウザ開発ツールなどから改ざん可能だからです)

php

1for($i=0;$i<count($a);$i++){ 2 if(array_key_exists($i,$a)){ 3 echo '・'.$a[$i].'<br />'; 4 } 5}

もしくは

php

1for($i=0;$i<count($a);$i++){ 2 if(isset($a[$i])){ 3 echo '・'.$a[$i].'<br />'; 4 } 5}

両者の違いは下記

投稿2018/05/29 02:08

m.ts10806

総合スコア80850

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問