• ベストアンサー

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
  • 回答数5
  • ありがとう数5

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

  • ベストアンサー
回答No.2

おまけ それ以外の条件を先に求めるとシンプルにはなります。 if(10 <= $age && $age < 40){  /* ここに10~39しかいない事がこれで保障されたので */  if ( $age<20) echo("10代");  else  if ( $age<30) echo("20代");  else  echo("30代"); }else{  echo("それ以外"); } ただ、実際には、これって、 10~19を「10代」って出すとしたら、 単に、値を10で割るだけでもいいんですけどね。 10で割れば、 10~19は1.0~1.9それを「整数部」だけみれば「1」 ですから。 なので、 こんだけで、一応終わる $dai=(int)($age/10); /* 割り算後整数部だけを取り出す */ if(1 <= $dai && $dai < 4){  echo $dai."代"; }else{  echo("それ以外"); } ちゃんと論理式も使ってますし! (ひねくれるとこういうのも回答としてはありです) 1<=$daiを、条件式なしで、 if ($dai && $dai<4) でもOK なぜなら、0歳~9歳を10で割ると最大0.9で、 それの整数部は0であるため、falseとみなせるため、 単純に最大値を確認するだけでOKになる。

okwaveokw
質問者

お礼

ありがとうございます

その他の回答 (4)

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

> エラーになるのはなぜですか?どの部分が原因でエラーになるんですかね? > 変数を論理演算子で左右から破産ではいけないから? 一つの変数を二つの論理演算子で挟むのがPHPの構文ルールに反しているのでエラーになります。

okwaveokw
質問者

お礼

ありがとうございます

  • chie65535
  • ベストアンサー率43% (8508/19344)
回答No.4

10 <= $age < 20 の値は、常にTrueになります。 まず「10 <= $age」が評価され、FalseかTrueのどちらかになります。 そして「(FalseまたはTrue)< 20」が評価され、常にTrueになります。 なぜならFalseまたはTrueは「0か1のどちらか」に数値変換されてから「20より小さいかどうか」が評価されるからです。 0も1も、どっちも20より小さいので、結果は「常にTrue」になります。 「10 <= $age < 20」は「意図した式とは違う」のですが「エラーの無い、構文的に正しい式」なので、エラーが起きず「意図しない結果」になるので注意しましょう。

okwaveokw
質問者

お礼

ありがとうございます

  • t_ohta
  • ベストアンサー率38% (5061/13226)
回答No.3

間違っています。 (10 <= $age < 20) のような論理演算の記述は構文エラーになります。 (10 <= $age && $age < 20) のように論理演算を1つずつ記述し論理積で繋ぐ必要があります。

okwaveokw
質問者

お礼

ありがとうございます エラーになるのはなぜですか?どの部分が原因でエラーになるんですかね? 変数を論理演算子で左右から破産ではいけないから?

回答No.1

if(10 <= $age < 20){ これは間違ってます。  (10 <= $age) これの答えがBoolになるので、  その真理値と< 20をする書式の為、正しくないです。 if(10 <= $age && $age< 20){ です。その他も同様

okwaveokw
質問者

お礼

ありがとうございます

関連するQ&A

  • 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
  • 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
  • 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
  • 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
  • vscodeでphpの以下のコードを実行すると、そ

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

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

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

    • ベストアンサー
    • PHP
  • locatin.hrefのリンク付き画像とPHP

    現在、MySQLとPHPを組み合わせたシステムを作っています。 MySQLのi5_volumeというカラムの中の数値が「1より大きい」ときにボタンを表示させ、0以下であれば表示させないようにしたいと考えています。 ボタンは画像でありlocation.hrefで別のページにリンクされています。 (OAuthで認証エラーを避けるため <a href></a> はNG) 画像からのリンクは下記のソースになります。 【画像のソース(locatin.hrefのリンク付き)】 <img src="./abc.png" onclick="location.href='sell.php?e2_id=<?php echo $price['e2_id']; ?>&time=<?php $time = date('G'); echo $time; ?>';" /> 「i5_volumeが1より大きければ画像を表示させ、0以下であれば表示させない」ためのPHPは下記です。 【規定値で画像が表示されるPHP(画像は直リンク)】 <?php IF ($my_volume['i5_volume'] >= 1) {echo "<IMG src=\"./abc.png\" >";} ELSE {echo "";} ?> 従い、 【規定値で画像が表示されるPHP(画像は直リンク)】 の画像のソース部分を 【画像のソース(locatin.hrefのリンク付き)】 に置き換えれば基本的にはいいはずなのですが、下記ではうまくいきません。エラーになり何も表示されません。 どこが悪いかご指摘頂けませんでしょうか? <?php <?php IF ($my_volume['i5_volume'] >= 1) {echo " <img src=\"./abc.png\" onclick="location.href='sell.php?e2_id=$_price['e2_id'];&time= $time = date('G'); echo $time;'" /> ";} ELSE {echo "";} ?>

    • ベストアンサー
    • PHP
  • phpでのメールフォームの画像表示について

    メールフォームを作成しているのですが、そこで画像の選択があります。 確認画面では画像の値(id="***")のみ表示させることができるのですが、選択した画像(jpg)も表示させたいと考えています。 PHPを使用していまして、フォームには下記のように記述しました。 <input type="radio" name="test" id="test01" value="radio" <? if( strcmp($DISP["test"],'test01')==0 ){ echo( 'checked="checked"' ); } ?> /> 確認画面にはこのように記述しました。 <? if( $DISP["test"] ){ echo $DISP["test"]; }else{ echo "&nbsp"; } ?> 画像も表示させたい場合は、どのように記述すればよいか解りません。 お解りになる方、よろしくお願いします。

    • ベストアンサー
    • 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において【式】とは http://php.net/manual/ja/language.expressions.php の冒頭にある >式は、PHP における最も重要な基盤石です。PHPにおいては、ほとんど全てのものは式で記述されます。最も簡単で最も正確な式の定義は、"全ての式には値がある。" です。 とありますが、つまりは式とは評価したとき返り値を持つものと解釈してもよいのでしょうか? 例をあげると $hoge = 5; //これは式 print $hoge;//これも式 echo (print $hoge); //これも式 print (print $hoge); //これも式 echo (echo $hoge); //これは?実行するとパースエラー なぜ一番最後の例のみパースエラーなのでしょうか? 調べてみると【print】関数・・・というよりprintという言語構文ですか これはどうも常に1という値を返すみたですね。 つまり、本質問の冒頭で申した通り、帰り値を持つものが式とするならば この echo (echo $hoge); は式ではない。 ということになりますか? 以上、ちょっと根本的すぎますが ご教授ください。

    • ベストアンサー
    • PHP