PHPのコードでの年齢判定の違い

このQ&Aのポイント
  • phpのコードでこの2つは何が違うんでしょうか?
  • 問題文が画像に書いてあるもので、上のコードは私が考えたもので、下のコードは画像の問題の答えです。
  • <?php $age = 10; if(10 <= $age < 20){ echo("10代"); }else if(20 <= $age < 30){ echo("20代"); }else if(30 <= $age < 40){ echo("30代"); }else{ echo("それ以外"); } 画像の問題文の正解 <?php $age = 43; if($age >= 10 && $age < 20){ echo("10代"); }else if($age >= 20 && $age < 30){ echo("20代"); }else if($age >= 30 && $age < 40){ echo("30代"); }else{ echo("それ以外"); }
回答を見る
  • ベストアンサー

phpのコードでこの2つは何が違うんでしょうか?

phpのコードでこの2つは何が違うんでしょうか? 問題文が画像に書いてあるもので、上のコードは私が考えたもので、下のコードは画像の問題の答えです 私の解いた答え <?php $age = 10; if(10 <= $age < 20){ echo("10代"); }else if(20 <= $age < 30){ echo("20代"); }else if(30 <= $age < 40){ echo("30代"); }else{ echo("それ以外"); } 画像の問題文の正解 <?php $age = 43; if($age >= 10 && $age < 20){ echo("10代"); }else if($age >= 20 && $age < 30){ echo("20代"); }else if($age >= 30 && $age < 40){ echo("30代"); }else{ echo("それ以外"); }

  • PHP
  • 回答数6
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
  • asciiz
  • ベストアンサー率70% (6640/9407)
回答No.6

>このtrueやfalseはブール型っていうやつですか? はい、そういうことです。 「比較式」は、比較した結果の値としてブール値を返します。 if文は判定式全体のブール値が True になったときだけ、続くブロックの中身を実行する、という命令である訳です。

okwaveokw
質問者

お礼

ありがとうございます

その他の回答 (5)

  • t_ohta
  • ベストアンサー率38% (5081/13278)
回答No.5

ご覧になって違いがわかりませんか? 貴方のプログラムはif分の条件式が「(10 <= $age < 20)」となっており、解答は「($age >= 10 && $age < 20)」と書いてあります。 この条件式の記述の仕方が違います。 PHPの構文ルールとしては「(10 <= $age < 20)」のように一つの変数を複数の比較演算子で囲む記述は認められていません。 なのでシンタックスエラーが発生しプログラムが動作しません。 解答のように比較演算子1つ毎に式を作り、複数の比較式を論理積で繋ぐ必要があります。 設問にも実際動かして予想道理の結果になるか試してみましょうと書いてありますから、実際に動かして確認しましょう。 プログラムは動かしてナンボです。 動かしてみてエラーが出て、エラーの意味を調べてリファレンスマニュアルを読み込んで、ようやくまともに動くプログラムになるモノです。 それをしないとプログラミングの勉強をしている意味がありませんよ。

okwaveokw
質問者

お礼

ありがとうございます

回答No.4

>9に該当するものはどれですか? if(10 <= $age < 20){ echo("10代"); ここです。 $age=9; if (10 <= $age この時点で、満たしていないので、帰り値はFALSE=0 その後、最初の部分が0になった状態で      0 < 20) を計算するので、 常にTRUEとなり、全年齢が、 echo("10代"); ここになるのです。 前回教えた通り、 if(10 <= $age < 20){ これは、1式になってるので、 if(10 <= $age && $age < 20){ と2式にしなければいけません。

okwaveokw
質問者

お礼

ありがとうございます

  • asciiz
  • ベストアンサー率70% (6640/9407)
回答No.3

プログラムというのは、書いた通り動くのではなく、書かれた通りに動きます。 どういうことかというと、 「(自分がこう動くと思って)書いたらその通り動く、のではなく、 書かれたものが(コンピュータによって解釈された結果の)動きをする」 というわけなんです。 あなたは、「もし $age が 10 から 20の間 なら」というつもりで >if(10 <= $age < 20) と書いたと思いますが。 プログラミング言語において比較演算子は、必ず2つのものしか比較できません。 そして比較演算子が複数並んでいると、左から順番に判定します。 そうすると、 >if(10 <= $age < 20) という記述はまず、 ①「10 <= $age」の部分を見ます。この式は、 $ageが10未満であればFalse(数値としては0)、$ageが10以上であればTrue(数値としては1)、という値になります。 ② 残りの「< 20」という部分で、True(1) または False(0) と、20を比較します。 TrueだろうがFalseだろうが、20よりは小さいので、この比較式は常に True(1) となります。 ③したがって、あなたの書いたif文は常に「echo("10代");」が実行されることとなってしまい、正しい判定ができません。 これがコンピュータによる解釈なので、あなたの想定した動作とはかなり違うものになってしまったわけですね。 ---- ここで回答の方を見てみると、 > if($age >= 10 && $age < 20) となっています。 演算子の結合の順位により、この式は次と同値になります。(一番内側のカッコから計算) > if( ($age >= 10) && ($age < 20)) さてそうすると、このプログラムは次のように解釈されます。 ① ($age >= 10) の部分を見て、$age が10以上であれば True(1)、$ageが10未満であれば False(0) となります。 ② ($age < 20) の部分を見て、$age が20未満であれば True(1)、$ageが20以上であれば False(0) となります。 ③ 論理演算子 && により、両方の条件が True となるとき、すなわち、「$ageが10以上」かつ「$ageが20未満」の時のみ、次の「echo("10代");」が実行されます。 以上で、「$ageが10以上20未満の時に『10代』を表示する」ということを実現しています。 残りの部分も同様に判定されていき、結局回答のものが、「○○代」を表示するために必要なプログラムである、ということになります。

okwaveokw
質問者

お礼

このtrueやfalseはブール型っていうやつですか?

  • agehage
  • ベストアンサー率22% (2552/11349)
回答No.2

#1です そもそも比較演算がおかしいです かつ と または の書き方がおかしいです

okwaveokw
質問者

お礼

ありがとうございます 9才10歳の件は。。。

  • agehage
  • ベストアンサー率22% (2552/11349)
回答No.1

回答者さんのコードだと9歳の人が10代になってしまいます

okwaveokw
質問者

お礼

9に該当するものはどれですか?

関連するQ&A

  • phpで画像のような問題があり、私が書いた式は以下

    phpで画像のような問題があり、私が書いた式は以下になりますが これは間違っていますか? ifelse確認問題 <?php $age = 10; if(10 <= $age < 20){ echo("10代"); }else if(20 <= $age < 30){ echo("20代"); }else if(30 <= $age < 40){ echo("30代"); }else{ echo("それ以外"); }

    • ベストアンサー
    • PHP
  • phpファイルを実行すると真っ白な画面が表示される。

    phpファイルを実行すると真っ白な画面が表示される。 本を片手にPHPを勉強中の初心者です。 下記にあるコードを実行したところ、 真っ白な画面が表示されました。 本に書いてある通りのコードを 一字一句間違わずに打ったつもりなのですが、 どこが間違っているのかどうしてもわかりません。 if文をネストした途端、上記の現象が起こったということは、 ネストの方法が間違っているのかとも思いましたが、初心者ゆえにわかりません。 どなたかご存知の方、是非ともご教示ください。 宜しくお願いします。 <?php $age = 0; if($age < 20) {      if($age != 0)      {         echo '未成年です';      } } else {      echo '成人です'; } ?>

    • ベストアンサー
    • PHP
  • プロゲートでphpのコードの勉強をしているんですが

    プロゲートでphpのコードの勉強をしているんですが、 プロゲートでは $x = 20; if($x == 30){ echo'$xは30です'; }else{ echo '$xは30ではありません'; } こんな感じで記述して推しているんですが https://prog-8.com/php/study/1/7#/22 本来phpって<?php ~~~~~?>こうじゃないとだめですよね? プロゲートの教え方間違ってますよねこれ?

    • ベストアンサー
    • PHP
  • vscodeでphpの以下のコードを実行すると、そ

    vscodeでphpの以下のコードを実行すると、そのまま書いたコードがターミナルに表示されます。なぜでしょうか? $x = 20; if($x == 30){ echo'$xは30です'; }else{ echo '$xは30ではありません'; }

    • ベストアンサー
    • PHP
  • PHPの構文

    名前と年齢をフォームページから入力して 名前・年齢、そして成人・未成年の表示をするPHPのサンプルがあります。 初学者で無駄な部分が多く複雑になってしまったのですが ここをもっとこうしたほうが良いなど もっとシンプルで分かりやすい構文にできるのでしょうか? よろしくお願いいたします。 in.php ----------------------------------------------- <html> <body> <form action="out.php" method="post"> <table><tr><td>名前入力: <input type="text" name="name"></td></tr> <tr><td>年齢入力: <input type="text" name="age"></td></tr> </table> <input type="submit" value="ボタン"> </form> </body> </html> ----------------------------------------------- out.php ----------------------------------------------- <html> <body> <?php $name = htmlspecialchars($_POST["name"], ENT_QUOTES); $agen = mb_convert_kana($_POST["age"], "a"); $age = htmlspecialchars($agen, ENT_QUOTES); If($name == ""){ if($age == ""){ echo "名前、年齢の入力がありません。"; }else{ echo "名前を入力してください。"; } }else{ if($age == ""){ echo "年齢を入力してください。"; }else{ echo "あなたの名前は{$name}、年齢は{$age}です。"; if($age<20){ echo "あなたは未成年です。"; }else{ echo "あなたは成人です。"; } } } echo "<p><a href='in.php'>フォームに戻る</a>"; ?> </body> </html> -----------------------------------------------

    • ベストアンサー
    • PHP
  • phpで3の倍数かつ7の倍数を表すのが if

    phpで3の倍数かつ7の倍数を表すのが if ($x % 3 == 0 && $x % 7 == 0) なんでこれが、 3の倍数かつ7の倍数という意味になるのでしょうか? ↓以下のコードから抜粋 <?php $x = 1071; // 以下にif-elseif-else文を書いてください + if ($x % 3 == 0 && $x % 7 == 0) { + echo 'xは3の倍数かつ7の倍数です。'; + } elseif ($x % 3 == 0) { + echo 'xは3の倍数ですが7の倍数ではありません。'; + } elseif ($x % 7 == 0) { + echo 'xは7の倍数ですが3の倍数ではありません。'; + } else { + echo 'xは7の倍数でも3の倍数でもありません。'; + } ?> </body> </html>

    • ベストアンサー
    • PHP
  • php問題について

    php の問題でどうしてこの答えになるかわかりません。 教えて下さい if(【 A 】) { print("true"); } else { print("false"); } 【1】"php" > "perl" 【2】0 != "0" 【3】5 - 6 + 1 【4】"false" 【5】0 + "false" 【6】"543a" < 56 【7】abs(-6) > 10 / 2 あなたの回答: 【2】【3】 正答: 【1】【4】【7】 どうして1がせいかいなのかわかりません。 教えて下さい

    • ベストアンサー
    • PHP
  • PHPのシンプルな構文(初心者)

    ランダムに出る掛け算の答えを入力して 別ファイルで正解か不正解という表示をする構文なのですが 「input type="hidden"」部分の値の出力・受取りができず 正しく実行がされません。 どこが間違っているのでしょうか? よろしくお願いいたします。 in.php -------------------------------------- <?php $saki = rand(1,9); $ato = rand(1,9); echo "$saki X $ato"; $seikai = $saki*$ato; ?> <html> <body> <form method="post" action="out.php"> <input type="text" name="kotae"> <input type="hidden" name="hid" value="<?php $seikai ?>"> ←※ <input type="submit" value="回答"> </form> </body> </html> -------------------------------------- out.php -------------------------------------- <?php $kotae = $_POST["kotae"]; $seikai = $_POST["hid"];     ←※ if($kotae == $seikai){ echo "正解です"; }else{ echo "間違っています。"; } echo "<hr>正解は{$seikai}です。"; ?> --------------------------------------

    • ベストアンサー
    • PHP
  • PHPの正規表現 メール受信と文字コードについて

    Yahooのメールサーバに接続しメールを取得、メール本文に特定の語句が含まれているか調べたいのですが、うまく行かず悩んでいます。 SJIS文字コードが原因なんでしょうか? かなり長い文章になるので、お暇でしたらご教授下さい。 PHP Version 5.2.5です。 以下のプログラムでの問題点です。 <?php $mb=imap_open("{pop.mail.yahoo.co.jp:110/pop3}INBOX","ID","pass") or die("メールボックスを開けません<br>"); $i=4;//メール番号 //imap_fetchbody、mb_convert_encodingで取得した変数<$body_sjis>と比較する為、メール本文を変数<$mail_honbun>としてファイル内に定義。 $mail_honbun="次のことはを感じで、書きなさい。(すべて)手へんの漢字です。 「正解」はこのあとすぐ。仕上げの湾カールが決まるのは:エッセンシャルダメージケア新発売"; $body=imap_fetchbody($mb,$i,1,FT_PEEK);//本文取得 $body_sjis=mb_convert_encoding($body,"SJIS","auto");//SJISに変換 echo("$body_sjis<br><br><br>"); echo("[mail_honbunの場合]<br>"); if(preg_match("/次の.+書きなさい。/",$mail_honbun,$temp))//OK echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); if(preg_match("/次の.+正解/",$mail_honbun,$temp))//OK echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); if(preg_match("/エッセンシャル/",$mail_honbun,$temp))//OK echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); if(preg_match("/ダメージ/",$mail_honbun,$temp))//NG 何故ダメージはマッチしない? echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); echo("---------------------------------------<br>"); echo("[body_sjisの場合]<br>"); if(preg_match("/次の.+書きなさい。/",$body_sjis,$temp))//OK echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); if(preg_match("/書き.+正解/",$body_sjis,$temp))//NG 。を超えるとマッチしない echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); if(preg_match("/エッセンシャル/",$body_sjis,$temp))//OK エッセンシャルはOK echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); if(preg_match("/ダメージ/",$body_sjis,$temp))//NG ダメージがNG、何故? echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); ?> ## 結果 ######################################################## [mail_honbunの場合] 次のことはを感じで、書きなさい。 次のことはを感じで、書きなさい。(すべて)手へんの漢字です。 「正解 エッセンシャル NOT MATCH --------------------------------------- [body_sjisの場合] 次のことはを感じで、書きなさい。 NOT MATCH エッセンシャル NOT MATCH ################################################################# 問題点<$mail_honbun>の場合 マッチするカタカナと、しないカタカナがある事。(エッセンシャルがマッチして、ダメージがマッチしない事) 問題点<$body_sjis>の場合 。を超えるとマッチしない事。 マッチするカタカナと、しないカタカナがある事。(エッセンシャルがマッチして、ダメージがマッチしない事) 自分で何が問題なのか、何を知らないのかがはっきりしません。 文字コードSJISを使わない方がいいのでしょうか? 参考になる事や、調べたら解決しそうなキーワードがあれば教えて下さい。宜しくお願いします。 ファイル"php.ini"の設定 mbstring.language = Japanese mbstring.internal_encoding = SJIS mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = SJIS,EUC-JP,JIS,UTF-8,ASCII

    • ベストアンサー
    • PHP
  • phpのコーディングの練習問題で画像の文章をコーデ

    phpのコーディングの練習問題で画像の文章をコーディングするんですが、 なぜ3でスキップと言っているのに、$i ==2 と書いているんでしょうか? <?php for($i = 1; $i <= 10; $i++){ if($i == 2){ continue; } else if($i == 7){ break; } else { echo $i."\n"; } }

    • 締切済み
    • PHP

専門家に質問してみよう