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

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

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

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

Q&A

解決済

4回答

1588閲覧

PHP for文 数字の表示

kohei0308

総合スコア1

PHP

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

0グッド

0クリップ

投稿2022/03/03 00:23

編集2022/03/03 03:20

for文で特定の数字を出力したいです。
しかし、こちらの課題の解答を見ても理解ができなく困っています。
大変失礼な投稿かもしれませんがこちらのコードロジックを解説して頂きたいです。宜しくお願い致します。
もし、こういうソースを読みなさい等があれば叱咤激励も含め、教えて頂きたいです。

PHP

1<?php 2// 以下をfor文を使用して表示してください。 3 4// 1 5// 21 6// 321 7 8 9$ten = 10; 10$sum = 0; 11for($i = 0; $i < 3; $i++) { 12 $sum = (($i + 1) * $ten**$i) + $sum ; 13 echo $sum . "<br>\n"; 14}

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/03/03 00:29

理解できないのであればまず改行して読み易くしましょう
yambejp

2022/03/03 00:43

まずはmarkdownしてください
kohei0308

2022/03/03 00:50

宜しくお願い致します。
kohei0308

2022/03/03 03:15

ご親切にありがとうございます。次回から気をつけます。
m.ts10806

2022/03/03 03:15

いえ、いつ来るか分からない次回に回したら忘れるので、今。
guest

回答4

0

ベストアンサー

PHP: 演算子の優先順位 - Manual
で演算される順序を確認できます。

PHP: 算術演算子 - Manual

$a + $b 加算 $a および $b の合計
$a * $b 乗算 $a および $b の積
$a ** $b 累乗 $a の $b 乗

$ten = 10; $sum = 0; $i = 0;のとき、
$sum = (($i + 1) * $ten**$i) + $sum ;
$sum = ((0 + 1) * 10**0) + 0;
加算や乗算よりも累乗の方が優先順位が高いので、10**0が先に処理されて1になり、
$sum = ((0 + 1) * 1) + 0;
$sum = ((1) * 1) + 0;
$sum = 1 + 0;
$sum = 1; となります。

続いて$ten = 10; $sum = 1; $i = 1;のとき、
$sum = (($i + 1) * $ten**$i) + $sum ;
$sum = ((1 + 1) * 10**1) + 1;
$sum = ((2) * 10) + 1;
$sum = (20) + 1;
$sum = 21;

続いて$ten = 10; $sum = 21; $i = 2;のとき、
$sum = (($i + 1) * $ten**$i) + $sum ;
$sum = ((2 + 1) * 10**2) + 21;
$sum = ((3) * 100) + 21;
$sum = 321;

実際に自分の手を動かして、変数の値を入れ込んでいけば、計算式の意味はどなたでも理解できるのではないでしょうか。

投稿2022/03/03 02:21

編集2022/03/03 02:23
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kohei0308

2022/03/03 03:41

ご回答ありがとうございました。 手取り足取り丁寧なご回答を頂きありがとうございます。マニュアルはまだ読みづらい部分がありますが少しずつ読み進めていきたいと思います。 
guest

0

ベストアンサー

理解できるまではちょっとずつ分解して把握したほうがよいかもしれません

PHP

1$ten = 10; 2$sum = 0; 3for($i = 0; $i < 3; $i++) { 4 //$iが3未満の間は0から1ずつ増えていく 5 $tmp1=($i + 1); 6 //$tmp1に$i+1を投入、最初は0なので$tmp1は1 7 $tmp2=$ten**$i; 8 //$tmp2に$tenのi乗を投入、最初は0なので$tmp2は1 9 $tmp3=$tmp1 * $tmp2 10 //$tmp3に$tmp1と$tmp2をかけ合わせたものを投入 11 $sum += $tmp3; 12 //$sumに$tmp3を加算 13 echo $sum . "<br>\n"; 14 //$sumを表示して改行 15}
  • 0のときは$tmp1=1,$tmp2=1,$tmp3=1,$sum=1;
  • 1のときは$tmp1=2,$tmp2=10,$tmp3=20,$sum=21;
  • 2のときは$tmp1=3,$tmp2=100,$tmp3=300,$sum=321;

投稿2022/03/03 00:52

yambejp

総合スコア115226

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

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

kohei0308

2022/03/03 03:43

簡潔なご回答ありがとうございました。 部分部分で切り取って細分化して調べるようにしたいと思いました。
guest

0

他の方が詳しく書いてくださっている、
ソースのロジックをまとめてみます。

考え方

得たい結果ですが、以下のように分解できます。

1 = {1 * 1}
21 = {2 * 10} + {1 * 1}
321 = {3 * 100} + {2 * 10} + {1 * 1}

また、
1 = 10 ** 0 (10の0乗)
10 = 10 ** 1 (10の1乗)
100 = 10 ** 2 (10の2乗)
であるため、上記は、

1 = {1 * (10 ** 0)}
21 = {2 * (10 ** 1)} + {1 * (10 ** 0)}
321 = {3 * (10 ** 2)} + {2 * (10 ** 1)} + {1 * (10 ** 0)}

となります。

上記の数字の「0,1,2」の部分をfor文で回したものが、
提示されておりますソースとなります。
「1,2,3」は「0,1,2」に1足したもの($i+1)で補っているようです。

その他

質問の趣旨から外れますが、
10までならば、以下の方法もあると思いました。
http://phptester.net/ で出力しました。

php

1$end = 10; 2$str = ""; 3for ($i = 1; $i <= $end; $i++) { 4 $str = (string)$i . $str; 5 echo (int)$str . "<br>\n"; 6} 7echo "<hr>"; 8 9$ten = 10; 10$sum = 0; 11for($i = 0; $i < $end; $i++) { 12 $sum = (($i + 1) * $ten**$i) + $sum ; 13 echo $sum . "<br>\n"; 14}

投稿2022/03/03 16:21

t-ochi

総合スコア48

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

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

0

php forでgoogleで検索したら、上の方に以下のサイトが表示されました

参考)
https://techacademy.jp/magazine/4896
yamabejpさんやphp-gresさんの回答やこのサイトを見ても理解が厳しいでしょうか?

そうであればこの先も独学はちょっと厳しい気がするので、ある程度のお金払ったりしてでももう少し丁寧に教えてくれるサービスを利用するのもありかもしれませんね。

投稿2022/03/03 02:19

編集2022/03/03 02:28
AbeTakashi

総合スコア4673

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

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

kohei0308

2022/03/03 03:44

ご回答ありがとうございます。  理解できましたが、有料サービスも検討したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問