○質問の主旨
先日、下記の質問をしました。
PHPのfor文とforeach文の使い方
http://okwave.jp/qa/q8812443.html
この例では,for文とforeach文を使って、
・果物の名前を4回繰り返す
・繰り返しの2回目と4回目は、"食べてください"という文字列を入れる
というプログラムを実現しています。
今回は同じ出力をするにあたって、
繰り返しはforeachのみで実現したいと考えています。
どのように修正すればよろしいでしょうか?
ご存知の方がいらっしゃいましたら、
ご教示を願います。
○質問の補足
このようなプログラムにしたいと考えています。
$fruits = array("りんご", "ばなな", "ぶどう", "みかん");
foreach ($fruits as $value) {
// 果物の名前を4回繰り返して2回目と3回目は"食べてください"を入れる
if (($i == 1) || ($i == 3)) {
echo "食べてください";
echo "<br/>";
};
echo $value;
echo "<br/>";
}
完成イメージはこんな感じです。
(1回目のループ)
りんご
ばなな
ぶどう
みかん
(2回目のループ)
食べてください
りんご
ばなな
ぶどう
みかん
(3回目のループ)
りんご
ばなな
ぶどう
みかん
(4回目のループ)
食べてください
りんご
ばなな
ぶどう
みかん
○前回のプログラム
for($i = 0; $i < 4; $i++) {
if (($i == 1) || ($i == 3)) {
echo "食べてください";
echo "<br/>";
};
$fruits = array("りんご", "ばなな", "ぶどう", "みかん");
foreach ($fruits as $value) {
echo $value;
echo "<br/>";
}
}
No.4ベストアンサー
- 回答日時:
>果物の名前を4回繰り返す
この 4回 というのは要素数とは無関係でしょ?foreach は繰り返す回数が「要素数」なのが便利だから(全部の要素を網羅してくれるから)使う。
そうでないなら普通に for や while (カウンタをインクリメントして所定の条件まで)を使うべき。
>繰り返しはforeachのみで実現したいと考えています。
自分で要素数を 4 にした配列を(array_fillとかで)あらかじめ作れば出来ることは出来る。が、そんなものに何の意味もありません。
// 意味のないソース
$loops = array_fill(1,4,'tmp'); // 添え字が 1,2,3,4 の配列を生成
$fruits = array("りんご", "ばなな", "ぶどう", "みかん");
foreach ($loops as $key=>$loop) {
if (($key == 1) || ($key == 3)) {
echo "食べてください";
echo "<br />";
};
foreach ($fruits as $value) {
echo $value;
echo "<br />";
}
print "<hr />"; // 終端をわかりやすくするために追加
}
もしかして外側のLoop(4回処理)と内側のループ(フルーツ名の各要素を処理)の二重ループが必要だということが理解出来ていないんでしょうか?
agunuzさん。
コメントありがとうございます。
>そうでないなら普通に for や while (カウンタをインクリメントして所定の条件まで)を使うべき。
おっしゃるとおり、
for文やwhile文を使った方がすっきりしますね。
今回出した例は本来の複雑な問題について、
デキるだけシンプルにしたつもりです。
ですが的をはずしてしまったようですね。
もう一度、問題の本質を捉えなおすところから
やり直してみます。
アドバイス助かります。
No.3
- 回答日時:
何のために4回のループをforeachにしたいのか分からないのですが、配列や連想配列を利用した処理を書きたいのであれば、下記のような方法もありかと思います。
$datas = array(
array("eat"=> false, "fruits" => array("りんご", "ばなな", "ぶどう", "みかん")),
array("eat"=> true, "fruits" => array("りんご", "ばなな", "ぶどう", "みかん")),
array("eat"=> false, "fruits" => array("りんご", "ばなな", "ぶどう", "みかん")),
array("eat"=> true, "fruits" => array("りんご", "ばなな", "ぶどう", "みかん")),
);
foreach ($datas as $value) {
// 果物の名前を4回繰り返して2回目と3回目は"食べてください"を入れる
if ($value["eat"]) {
echo "食べてください";
echo "<br/>";
};
foreach ($value["fruits"] as $fruits) {
echo $fruits;
echo "<br/>";
}
}
t_ohtaさま
コメントありがとうございます。
連想配列のキーの名前を、true or falseで表して、
その真偽で「食べてください」の表示を判断させるという
例ははじめて見ました。
今後の参考とさせていただきます。
アドバイス助かります。
No.2
- 回答日時:
2点課題
$fruitsを宣言するならループの外がよい
$fruitsのデータを列記するだけならforeachでまわさずimplodeでよい
で、forをforeachにおきかえるならrangeを使うとよいかも
あまり頭のよいやり方にはみえないけど・・・
<?PHP
$fruits = array("りんご", "ばなな", "ぶどう", "みかん");
foreach(range(0,3) as $i) {
if (($i == 1) || ($i == 3)) {
echo "食べてください";
echo "<br>\n";
};
print implode("<br>\n",$fruits)."<br>\n";
}
?>
No.1
- 回答日時:
その「前回のプログラム」の for ループを意味的に等価な形で foreach にすることはもちろん可能なんだけど....
そもそも, なんでそんなけったいなことをしなきゃならんの?
Tacosanさん
コメントありがとうございます。
>そもそも, なんでそんなけったいなことをしなきゃならんの?
前回作成したコードと、今回の質問のために
他の回答者さまが考えてくださったコードを比較すると、
どうしても後者は複雑にならざるを得ません。
前回、今回の質問ともに、
本来の問題となっているプログラムの本質部分を
取り出して聞いたつもりですが、
その本質の的をはずしてしまったように思います。
もういちど「何をしたい」のかというところから
捉えなおしたいと思います。
アドバイス助かります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- PHP 文字列を段落で分ける方法を教えて下さい。 2 2023/03/09 10:03
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHP、{}記号の意味
-
配列(int)要素同士の合計、割り算
-
多次元配列の中で条件に合う要...
-
マッチング処理(1:N)
-
mysql_fetch_arrayを何度も使い...
-
ラジオボタンをランダムに表示...
-
リストボックス複数選択抽出方法
-
foreachで配列を、左から縦3列...
-
phpでforeachの中にforeachがあ...
-
添え字が全て文字列のPHPの多次...
-
Excel VBAでフィルター後の対象...
-
配列の値によって条件分岐がし...
-
foreachとかの勝手な省略?
-
東京、ディズニーランド付近の...
-
csvファイルの不定長フィールド...
-
Smartyでインクリメント
-
シャッフルした変数を正しく表...
-
プルダウンメニューにDBの内容...
-
PEAR・MDB2のモジュールロード...
-
smartyで配列の中の同数値の数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPでこのコード自体に意味は無...
-
マッチング処理(1:N)
-
foreachで上限回数指定方法また...
-
PHP、{}記号の意味
-
PHPで変数名にハイフンを使うに...
-
PHPで連想配列のプルダウンメニ...
-
VB.NET で 二次元のハッシュは...
-
配列からプルダウン用のHTMLを生成
-
多次元配列を、1次元の配列にす...
-
Smartyでインクリメント
-
phpでforeachの中にforeachがあ...
-
Excel VBAでフィルター後の対象...
-
foreachとかの勝手な省略?
-
foreachで配列を、左から縦3列...
-
$_POST受信で必要項目のみを結...
-
POSTで渡されるデータの数がわ...
-
リストボックス複数選択抽出方法
-
ftokが動かない?
-
foreachの間にテーブルの<TR>を...
-
3つの連想配列を交互に代入し...
おすすめ情報