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

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

ただいまの
回答率

90.87%

  • PHP

    18586questions

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

  • JavaScript

    14725questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

for文はもう使わない?

解決済

回答 11

投稿 編集

  • 評価
  • クリップ 5
  • VIEW 2,520
退会済みユーザー

退会済みユーザー

for文はもう使わない?

forおじさんと揶揄されていますがJS、phpなどではすでに使わないほうがいいのでしょうか?
極力whileを使って、どうしても使わざるおえないときのみ使うべきなのでしょうか?

ただwhileでできない事はまったくないと聞くので一切使わない手もありますね。

読みにくいからでしょう?

皆さんありがとうございます。
沢山ご回答いただいたのでここで一括にお返事させてもらいます。

まだfor文を使うのは有りなのですね。
単純な繰り返し、繰り返しの回数が決まっていない場合は、
最速はwhileをとりあえず使い。

何回繰り返すか、決まっている場合でwhileでは無理のある場合のみforで良い。
という感じですかね。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2017/09/20 18:39

    複数のユーザーから「プログラミングに関係のない質問」という意見がありました
    teratailでは、プログラミングに関して困っていることがないと思われる質問を推奨していません。
    「質問を編集する」ボタンから編集を行い、具体的に困っている理由や解決したいことを明確に記入していただくと、回答が得られやすくなります。

  • t_obara

    2017/09/20 18:46

    なぜforを使わない方が良いと言われているのかお調べになりましたか?その理由を調べ、その理由に納得できれば結論が出るかと思います。もちろんwhileを代わりにという結論にはならないと思います。

    キャンセル

  • alg

    2017/09/20 19:25

    使わざる負えない → 使わざるを得ない

    キャンセル

回答 11

+26

forを使わないとは、どんな文脈で言われたことかにもよりますが、おそらく「whileを使え」という意味ではありません。
「集合演算を使え」ということではないかと。
map, filter, reduce などといったキーワードで探していただくといろいろ出てくると思うのですが、ループを回して要素一個一個に対する処理を書くのでなく、「各要素についてこの処理を適用せよ」的に、列そのものを操作対象にしていく記法です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+10

PHPでやるなら9割の状況でforeach。
なぜならばPHPがHTMLの動的生成がゴールになることが多い以上、配列を触る状況が殆どだから。

whileやfor文は何度動作するのかを常に把握し続ける必要がある、
1回多くループが回っても、1回少なくループが回っても駄目。
状態変数が増えてソースコードが読みづらくなった結果、不具合が発生しやすくなる。
(特に九九の掛け算や多次元配列を操ると一気にネストが深くなり状態変数も一気に増える)

配列操作に限定されるけどforeachを使えば何度ループが回るかが一目。
配列のアイテムが既に取り出せた状態から始まるから状態変数の管理も不要といい事ずくめ。
またforやwhileと比較してもほぼ等速なのでforeach以外を使う意味がない。

残り僅かのケースは速度がどうしても遅いからチューニングする事になって、
無からわざわざrange(1, 10)みたいな事をしてforeachを使うのは賛否両論があるから、for ($i = 0; $i < 10; $i++)はわざわざ避ける必要はない。
fopen、feofみたいな低級関数(低俗という意味ではなく、マシン語に近いという意味ね)を使う場合はwhileがよく使われる。

まぁ、PHPは多くの配列操作用のビルトイン関数が揃っているから、
筋の良い関数を使ってワンライナーで書ける場合はforeachすら不要。
下記の関数が一例(他にもあるかも)

yambejpさんの一例は賛否あるだろうけど個人的には好き。
PHPならではの良さを考えると富豪的で分かりやすい手法はあって良いと思う。


JavaScriptもDOM操作の元になる配列を作ったり、Ajax通信でPHPからJSONを貰ってきて解析する事が多い。
やはり配列の操作がメインになるから純粋な配列やオブジェクトを用意して、for (;;)やwhileを避けて開発するべきだね。
(こねくり回した不順な配列やオブジェクトはthink49さんが言うようにfor...in等でprototypeが紛れ込む罠がある)

JavaScriptでやる場合for...offor...inを使っていくとPHPのforeachと同じ事が出来る。
ただ、for...ofは古いブラウザに非対応だし、for...inはkeyが来るのでPHPのforeach程汎用的に使えるわけじゃない。
yubaさんの言うようにリスト操作用のメソッドを利用していくのがベースになる。

高速なライブラリや関数を作るならforやwhileを使いまくりになると思うけどね。
もちろんその分のテストもすべきだし、ライブラリの中身は可読性ガン無視で良いわけでもないから考えて使うのは重要だと思う。


追記部分への対応

何回繰り返すか、決まっている場合でwhileでは無理のある場合のみforで良い。
という感じですかね。

for文の速度に関しての言及は特に無かったけど、別にwhileだから速いということは無い。
言語にもよるけど、コンパイラが解釈して同じマシン語に変換されるので同じ速度になる可能性もある。

もっと言うと、for文で1箇所にまとめた方が良いマシン語に変換されて速く動作する可能性すらある。
本当に速度を気にするならちゃんとコンパイラの実装まで確認した方がいい。
(私は確認したこと無いけど、100万回程ループ回して比較しているベンチマーク記事とか結構あるからね)

なんとなくwhileの方がやってること少ないから速そうだからと、何でもかんでもwhileで書くのはやめて、まずは可読性の事を考えよう。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+10

「JS、phpなど」とありますので、JavaScriptとPHP以外についてそれぞれ取り上げてみました。

Go

Goにはwhileがありません。無限ループや単純な条件ループはwhileの代わりにforを使う必要があります。

Ruby

Rubyのforは使う理由がありません。ブロックを作らないというただ一つの違いを除きeach呼び出しと同じだからです。私は(検証などを除いて)Rubyでforを書いたことは一度もありません。

Java

拡張for文がまだまだ使えると思います。StreamのforEachというのもありますが、ラムダ式に制限が多い(finalまたは暗黙finalなローカル変数しか使えないとか、検査例外を非検査例外にする必要があるだとか)ので使いやすいとは言えないです。

C++

範囲ベースfor文が非常に使えます。for_eachってあまり使った覚えが無いです。こちらもラムダ式を扱うのが面倒だからかもしれません。

C

そもそもfor_each等の代替となる関数や仕組みが標準で用意されていません。配列の要素を辿る場合は、0からnまでの数値を増やしながらの順次処理にするしかないのですが、whileで代用すると非常に読みにくくなってしまいます。ただ、null終端文字列などは最後が\0であることを利用して、whileを使った方が良い場合があります(strcpyの実装例等)。

Python

forを禁止にされると便利な内包表記まで使えなくなってしまいます。forを使わないというのはあり得ないです。

Haskell

Haskellにはforがありません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

+5

ループ回数が最初から分かっている場合なら、for を使う。
ループ回数が不定なら while, do-while を使う。
リスト構造などに対する全体処理なら foreach なり集合関数を使う。

結局のところ適材適所であって、for だからというだけで否定するのは賢いとは言えませんね。
リストからデータを削除していくような場合だと、foreach 系は使えず(foreach の最中に、元の集合を追加・削除するのは禁忌事項です)、for を逆順で回して処理する、なんて使い方もしますが。
※別の集合に入れていく手もありますが、メモリを食うしガベージコレクションが汚くなるしで、やりたかないですねえ

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/22 15:30

    forよりもwhileが優れているからforを使うのはやめよう。という主張ではないのですね。

    ループ回数が最初から分かっている場合なら、for を使う。
    ループ回数が不定なら while, do-while を使う。
    リスト構造などに対する全体処理なら foreach なり集合関数を使う。

    という順番で考えて選べばよいというのが結論のようですね。
    皆さんありがとうございました。

    キャンセル

  • 2017/09/22 15:50

    > リストからデータを削除していくような場合だと、foreach 系は使えず
    ダサくて筋が悪いのは確かですが、PHPのforeachは元の配列に破壊的な変更が加わろうとするとコピーを取って整合性を保とうとする挙動なんで不具合が出るわけではありませんね。

    ```PHP
    <?php
    $items = [1, 2, 3, 4, 5];
    foreach ($items as $key => $item) {
    if ($item === 3 || $item === 4) {
    unset($items[$key]);
    }
    }
    var_dump($items);

    array(3) {
    [0]=>
    int(1)
    [1]=>
    int(2)
    [4]=>
    int(5)
    }
    ```

    ちゃんと4も削除されますね。
    因みにforeachの中で`$items[] = 123`みたいな事やっても無限ループにはなりません。
    まぁ、コピー後の本物と切り離された物体Xを元に本物を捜査し始めて沼になるって意味ならその通りですが…

    キャンセル

  • 2017/09/22 23:39

    > ループ回数が最初から分かっている場合なら、for を使う。
    配列などのリスト構造を前提にしていると思うのですが、for文のループ条件は array.length に限定されないので、そういう使い分けと思い込んでしまうと視野が狭まってしまうように思いました。
    厳密には、「初期化式」もしくは「各反復の終了時に呼び出す式」が必要ならforを使う、ではないかと。

    キャンセル

+4

 for 文

JavaScriptにおいては、古い環境(PC)でも安定して高速に動作するので、今でも for は使います。
ただ、実際のところ、3つめのエリアは使わなくても書けるので while で書くことが多いですが。

for (var i = 0, len = array.length; i < len; ++i) { // ++i のエリアが要らない
  array[i] = 1;
}

// ↓

for (var i = 0, len = array.length; i < len; ) { // 3つめのエリアが空欄で無駄
  array[i++] = 1;
}

// ↓

var var i = 0, len = array.length;
while (i < len) { // while で十分
  array[i++] = 1;
}

ただし、for 文で配列を走査する場合、値の存在しない要素も undefined と評価してしまう問題があります。

var array = [,,2];

for (let value of array) {
  console.log(value); // undefined -> undefined -> 2
}

for (var i = 0, len = array.length; i < len; ++i) {
  console.log(array[i]); // undefined -> undefined -> 2
}

array.forEach(v => console.log(v)); // 2

for (var i = 0, len = array.length; i < len; ++i) {
  if (array.hasOwnProperty(i)) {
    console.log(array[i]); // 2
  }
}

逆にいえば、Array#forEach はプロパティの存在確認という手順を for 文よりも多くしている為、パフォーマンス効率が悪いと判断する事も出来ます。
値の存在しない配列に遭遇する機会がどれだけあるかは分かりませんが、この性質は留意しておく必要があります。

 for 文以外の構文、関数

一般に for 文が非推奨とされるのは、同一スコープ上に存在する変数の数が多くなり、保守性が低下するからです。
const や let を使えば解決する問題ですが、スコープを分ける場合には他にも選択肢があります。

  • Array.prototype.forEachArray.prototype.filter 等の Array.prototype 系メソッド (ES5)
  • for-of (ES6)
  • Map.prototype.forEach (ES6)
  • Object.keys() (ES5)
  • Object.values()Object.entries() (ES8)

しかしながら、Array.prototype.filter は配列全体を検索して新しい配列を生成して返す関数であり、目的を見据えて実装しないとパフォーマンスが低下する懸念があります。
その処理は破壊的で良いのか、非破壊的でなければならないのか、は良く考えて実装する必要があります。

私は for 文は、まだ現役だと思っていますよ。
使用頻度は低下しているかもしれませんが、選択肢の一つとして持っておくのは悪くないと思います。

Re: amebatv さん

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+3

比較的初心者ですけど、回答してみます。

処理内容によるのではないでしょうか?

例えばリストや配列などを回すときにforwhileを使うのは確かに良くないと思います。無駄な繰り返し変数が必要だからです。
forEachmap等を使うのが今は一般的でしょう。

しかしリストや配列を使わずに処理を繰り返したいならばそれこそforを使う方が読みやすいでしょうし、特定条件(終了するイベントなどでしょうか?)を元に処理を続けるかを判断するのにはwhileが適していると思います。

またforの代用がwhileに務まるかと言われるとそうではない気がします。

「どんな処理にも」forを使うのは古いと思いますが、中にはforが適した処理もあります。それが言いたかったことです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/20 19:00

    この意見は同意ですが、JSに限った状況ですね。

    PHPはarray_mapやarray_walkの使い勝手がゴミ(useであれこれ持ち込んだり、外で宣言して適用するという事がやりづらい)なんで、一時期使いまくってましたが、筋が悪いという結論が出ました。
    Qiitaなんかでもtadsan氏の「array_mapにありがとうさようなら」のような使うな記事も出てますしね。
    関数型プログラミング的ではなく、オブジェクト指向的でちょっと宣言的な書き方にして気をつけるのが現実的だと思います。

    キャンセル

  • 2017/09/20 19:07

    コメントありがとうございます。
    完全にjavascriptサイドの発言でした。すみませんm(_ _)m

    Python派でしてPHPは全然なんですよね…言語問わずfor文一般に言えるかなと思い回答しました。

    ところで、回答しておきながらこの場で聞くのもアレですが、

    for文が嫌われる理由があるとすると、for(;;)の;;に色々と複雑な処理を「書けてしまう」からというのも理由の一つなんでしょうか?可読性の低下をもたらすので嫌われたんじゃないかなと、、

    キャンセル

  • 2017/09/20 19:38 編集

    forを使うために一時変数を用意する必要がある(大体 $iとかでわかりにくい名前)というのもあると思います。
    「すべての要素に対して処理したい」とだけなのに、$i や $len の意味まで把握しないといけない。というのはストレスかなと。
    ループがネストしたら顕著ですね。

    ※よく読まずに見当違いのコメントしてました。すみません。

    キャンセル

  • 2017/09/20 20:47

    いえいえ、コメントありがとうございます。

    繰り返し変数といい複雑な処理が書けてしまうことといい、結局可読性の問題なんでしょうね。多分。

    キャンセル

  • 2017/09/20 22:36

    > forを使うために一時変数を用意する必要がある(大体 $iとかでわかりにくい名前)というのもあると思います。
    その理由が大半だと私も思いますが、個人的にはあの泥臭い手間が嫌いではないです。
    変数をやりくりして効率の良い処理が書けた時の達成感とか、原始的な for, while 文だからこそ出来る事もあります。
    例えば、最近書いたコードは最速を自負できる程のベンチマーク結果を残せましたが、一般的には受け入れられないだろうなあとも思います。
    https://gist.github.com/think49/2a30b4e865f3dca4043440fb9b99a448
    ただ、for や while は余計な処理がない単純処理だからこそ、アルゴリズムを工夫してパフォーマンスを向上させやすい面は確かにあると思います。

    キャンセル

  • 2017/09/21 11:39

    forやwhileが読みづらくバグが混入し易いのはPHPも同様ですが、
    PHPはmapやforEachに相当するarray_mapやarray_walk関数がイケてないという事情ですね。

    for(;;)自体は悪くないと思いますよ。
    黒魔術書いちゃう子は三項演算子のネストとかし始めるんでどの道駄目です。
    特に以下の2つの使い方に限定すればバグもほぼ混入しないでしょうし、命令も簡素、whileと比べて1行で済み可読性も高いです。

    - `for(i = 0; i < 10; i++)`: 0〜9の10回ループ
    - `for(i = 1; i <= 10; i++)`: 1〜10の10回ループ

    このように初期値を0か1に限定する所がポイントですね。
    困ったことに世の中にはiの初期値が0や1じゃない可能性があり、そういう時はかなり辛いです。
    特にループが何度回るのかは机上デバッグや関数の外からでは判別しにくいですからね…

    キャンセル

  • 2017/09/21 13:25

    三項演算子のネストって恐怖ですねΣ(°□°)

    勉強になりました。ありがとうございます。

    キャンセル

+2

前提は配列操作なのでしょうか?
であれば、miyabi-sun さんの回答がしっくりきます。

ただ、なんでもかんでも同じループ使うのか?というのは、疑問があり。
回答している方、それぞれできたら聞きたいのが・・・

無限ループ(そもそも、やらないという回答もあり)
n回リトライ(わざわざ、n要素数の配列を作る?)

とか、記載してくれると勉強になります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/20 21:58

    > 無限ループ
    これは`while(true)`
    遭遇したエンジニアが「おっ、無限ループだ気をつけよう」って一目で分かる所がポイント高い。

    > n回リトライ(わざわざ、n要素数の配列を作る?)
    関数で閉じ込めておきたいから、基本再帰でやってるよ。

    キャンセル

  • 2017/09/20 22:53

    > 関数で閉じ込めておきたいから、基本再帰でやってるよ。
    目からウロコでした。ワリと定石なんですかね。
    勉強になりました。

    キャンセル

+2

forよりもwhileが優れているからforを使うのはやめよう。という主張ではないと思います。

ほかの方が答えられている通りfor/whileで書くよりもわかりやすい記述ができる(場合が多い)ので、一番わかりやすい形でコーディングしよう。という心がけ?的なものではないでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

感覚的にPHPでforを使う機会がほぼないですね
ループ処理はほぼwhileかforeachしか使わないし
繰り返し文字列の制御も配列系の関数でやることが多いです

prepare処理のために「?」を指定回数連結する

print implode(",",array_fill(0,10,"?"));

連続する数字をつなげる

print implode("-",range(10,20));

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

せっかくなのでまだ挙がっていないC#について言います。

2005年の、C# 3.0 からあるLINQが使いやすくなっていて、確実にfor/foreachを使う機会は減ったといえます。一プロジェクト中に一回も出てこないこともあり得ます。
ループ中の分岐も不要になる場合が多く、for/foreachよりもわかりやすいので使わない手はないと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

-7

forもwhileも副作用があるので使わないで良いです。再帰処理で対応出来ますし。
もちろん、それらを使っても良いですが。(phpの場合は分かりません。)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/20 18:48

    マイナス2評価喰らった!

    キャンセル

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

  • ただいまの回答率 90.87%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    【Perl】keys と each の使い分け

    Perlの関数について教えていただけますでしょうか。 下記2つの書き方は結果として同じことをしていると思うのですが 何が違うのでしょうか? while (my $key = e

  • 解決済

    Pythonで CSVをCGIからPandasにファイルごと読み込む方法

    お世話になります。 Python3.5.2 win7 64bitの環境です。 1000行×6列のcsvファイルのデータをPandasに読み込ませる作業を行っています。

  • 解決済

    java コラッツ予想のプログラム

    前提・実現したいこと コラッツ予想とは、任意の整数において、それが偶数ならば2で割り、奇数だったら3を掛けたものに1を足すという操作を繰り返して行くと、必ず最終的に1になるという

  • 解決済

    c言語において、特定の条件を満たすまで何回も同様な処理を繰り返すにはどうすればよいか?

    現在、c言語を学習中の者です。 初めての質問のため、お試し的な意味もこめて質問をしました。 今回の初質問で、このサイトの返答の早さや、返答の質を知りたいとも思っております。 説明不

  • 解決済

    【Java】同じ処理を繰り返したい

    前提・実現したいこと 入力してください → しんぶんし 回文です. 入力してください → しんぶん 回文ではありません. 入力してください →  //(以下同様に続く) 以上の

  • 解決済

    Android Studioで Executing tasks実行中にjava.lang.Runti...

    初めての投稿なため、分かりづらい等あるかと思いますが、 ご協力のほど、よろしくお願いいたします。 Android StudioでKotlinの勉強をするため、環境構築を行ってい

  • 解決済

    繰り返し処理について

    javaのプログラムの勉強をしているのですが、結果が112123になる意味が分かりません。最初のwhileでtrueを返して1が表示されて、インクリメントされてるんで、iは2になっ

  • 受付中

    Unity(C#) 無限にループしてしまう

    Unityでボタンを作成しています。 下記のプログラムを実行すると、無限ループにハマってしまいます。 詳しい方がいらっしゃいましたらぜひ教えてください。 using Sys

同じタグがついた質問を見る

  • PHP

    18586questions

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

  • JavaScript

    14725questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。