◆20200903 ・round関数を使って四捨五入 ・代入演算子 ・比較演算子の復習 ・真偽値変換 boolval関数
本日の授業内容
要約
○PHP 切り上げ・切り捨ての関数について
ceil( ):切り上げ
floor( ):切り捨て
round( ):四捨五入
※round関数について
round(丸める値 , ①丸める桁の位置 ,②丸めモード)
①丸める桁の位置・・1→小数第一位、2→小数第二位、-1→一の位、2→十の位
②丸めモードは4択。
・PHP_ROUND_HALF_UP→切り上げ
・PHP_ROUND_HALF_DOWN→切り捨て
・PHP_ROUND_HALF_EVEN
→(①桁の位置)の隣が5だった時に(①桁の位置)が偶数だった場合切り捨て
・PHP_ROUND_HALF_ODD
→(①桁の位置)の隣が5だった時に(①桁の位置)が奇数だった場合切り捨て
○代入演算子
JS・・・ +=
→PHP・・・ .= になるので注意
○比較演算子
===:厳密等価演算子:左辺右辺の値とデータ型が一致した時にTRUE。
==:等価演算子:左辺右辺の値が一致した時にTRUE。データ型が異なったときは左辺右辺どちらかのデータ型に合わせる
例)'東京'==0→これはTRUEになる
なぜか?→文字列型を数字型に変換すると0になるらしい。
==だとTRUE、===だとFALSE
○真偽値の変換 boolval関数
boolval( 値 )
→引数で指定した値を真偽値で返してくれる
0→false
1→true
○他、問題演習
以下板書
〇数値を扱う関数 roundを使った問題の続き
< h1 > 税込金額</ >
<?php
$price= 198;
$tax = 0.1;
$total = $price * (1 + $tax);
echo '<h2>1回目の出力</h2>';
echo '<p>商品価格:'.$price. '円</p>';
echo '<p>税率:'.$tax. '</p>';
echo '<p>税込金額:'.$total. '円</p>';
echo '<h2>2回目の出力</h2>';
echo '<p>税込金額(切り上げ):'.ceil($total). '円</p>';
echo '<p>税込金額(四捨五入):'.round($total). '円</p>';
echo '<p>税込金額(切り捨て):'.floor($total). '円</p>';
// round・・丸め処理
// round( float $val[,int $precision=0[,int $mode=PHP_ROUND_HALF_UP]])
// 関数名(データ型 説明用名称):戻り値の型
// []で囲まれた引数は省略可能
// 省略可能引数:[int $precision=0]
// 第一引数(float:小数):丸める値
// 第二引数(int:整数):丸める桁の位置
// →省略可:0になるように丸め
// 第三引数(int:整数):丸めモード
// PHP_ROUND_HALF_UP(四捨五入)
// PHP_ROUND_HALF_UPは定数で中にINT型の整数が入っている。
// round(123.456,2,1)←記述する際はこの形でおk
// 戻り値(float:小数):丸め処理後の値
// 問題1
// 様々な数値を使って1000円単位で表示するようにすること
// 丸目処理は四捨五入を使用する事
echo '<h2>問題1</h2>';
$price1 = 2523;
echo round($price1, -3);
echo '<br>';
// echo round($price1, -3);
// ↑第一引数(float:小数):丸める値
// 第二引数(int:整数):丸める桁の位置
// →省略可:0になるように丸め
// 第三引数(int:整数):丸めモード ※今回は指定する必要がないので
//省略
// 問題2
// 様々な数値を使って小数点第2位で表示されるようにする事
// 丸目処理は偶数丸めを使用する
// 小数点以下が0になった時は省略されておk
・第二引数で設定した値の隣の値が5だった時に設定する「第三引数」
//① PHP_ROUND_HALF_EVEN
第二引数で指定した数値の、隣の数値が偶数だった時は切り捨てる
// ②PHP_ROUND_HALF_ODD
第二引数で指定した数値の隣の数値が奇数だった時は切り捨てる
$price2 = 0.085;
// 5が出てきたときの処理をする基準
・答え
$price2 = 0.085;//0.08
$price2 = 0.086;//0.09
$price2 = 0.087;//0.08
$price2 = 0.088;//0.09
$price2 = 0.089;//0.08
$price2 = 0.0851;//0.09
?>
〇代入演算子
<?php
echo '<h2>1回目の出力</h2>';
$text1 = '2018年1月';
echo $text1. 'お正月';
echo '<br>';
echo $text1; //変数の値は元のまま
// ブラウザ表示
2018年1月お正月
2018年1月
echo '<h2>2回目の出力</h2>';
$text2 = '2018年1月';
$text2 = $text2. 'お正月'; //文字列連結した結果を変数に代入
echo $text2;
// ブラウザ表示
2018年1月お正月
echo '<h2>3回目の出力</h2>';
$text3 = '2018年1月';
// ブラウザ表示
2018年1月お正月
echo $text3;
// 問題
// 好きな映画を配列で管理
// 番号付きリストで出力
// HTMLコードを$codeに代入してから出力
echo '<h2>問題解答</h2>';
$movie = [
'1' => 'トトロ',
'3' => '豚',
];
// ↑使用は必須ではないがソースコードを見やすくするために使うと便利かも
for ($i = 1; $i <= 3; $i++) {
$code = '<li>';
$code.= $movie[$i];
$code.= '</li>';
echo $code;
};
echo '</ol>'.PHP_EOL;
// 本問題は$codeにliタグを連結代入して表示させるのが狙いだった
?>
〇比較演算子
01_relational_operator.phpより
< h1 > 比較演算子</ >
<pre>
<?php
$val = 10;
echo '<h2>1回目の出力</h2>';
var_dump($val === 10);//T
var_dump($val === '10');//F
var_dump($val === 5);//F
var_dump($val === '東京');//F
// ===は厳密等価演算子
// 右辺左辺のデータ型も含めて等しい場合はTRUEを返す
// ==は等価演算子
// 右辺左辺が等しい場合にTRUEを返す。
// データ型が違う場合はどちらかの型に合わせて比較
echo '<h2>2回目の出力</h2>';
var_dump($val == 10);//T
var_dump($val == '10');//T
var_dump($val == 5);//F
var_dump($val == '東京');//F
//'東京'を数値型にすると0
// 故に var_dump($val == '東京')はFになる
var_dump(0 == '東京');//true
// PHP8からは数値型での型揃えではなく文字列型に型を揃えて確認になるの
// で'0'=='東京'//Fになる予定。
echo '<h2>3回目の出力</h2>';
var_dump($val !== 10);//F
var_dump($val !== '10');//T
var_dump($val !== 5);//T
var_dump($val !== '東京');//T
// !=は不等価演算子
// 右辺左辺が等しくないときにtrueを返す。
echo '<h2>4回目の出力</h2>';
var_dump($val != 10);//F
var_dump($val != '10');//F
var_dump($val != 5);//T
var_dump($val != '東京');//T
?>
</pre>
〇真偽値変換 boolval関数
< h1 > 真偽値への変換</ >
<pre>
<?php
echo '<h2>1回目の出力</h2>';
$val = 0;
var_dump($val);
var_dump(boolval($val));
// boolval関数
// 引数で指定した値を真偽値に変換してくれる
// 数値型0は真偽値に変換するとfalse
if ($val) {
echo 'true';
} else {
echo 'false';
}
// ブラウザではfalse表示
echo '<h2>2回目の出力</h2>';
$val = 5;
var_dump($val%2);
var_dump(boolval($val%2));
if ($val%2) {
echo 'true';
} else {
echo 'false';
}
// 余りが出る場合はT、出ない場合はF
// 今回はブラウザにT表示
echo '<h2>3回目の出力</h2>';
$val = 4;
var_dump($val%2);
var_dump(boolval($val));
if ($val%2) {
echo 'true';
} else {
echo 'false';
}
// 今回はブラウザにF表示
echo '<h2>4回目の出力</h2>';
$val = 0.0;
var_dump($val);
var_dump(boolval($val));
if ($val) {
echo 'true';
} else {
echo 'false';
}
echo '<h2>5回目の出力</h2>';
$val = '';
var_dump($val);
var_dump(boolval($val));
if ($val) {
echo 'true';
} else {
echo 'false';
}
echo '<h2>6回目の出力</h2>';
$val = 'あいう';
var_dump($val);
var_dump(boolval($val));
if ($val) {
echo 'true';
} else {
echo 'false';
}
echo '<h2>7回目の出力</h2>';
$val = '0';
var_dump($val);
var_dump(boolval($val));
if ($val) {
echo 'true';
} else {
echo 'false';
}
echo '<h2>8回目の出力</h2>';
$val = null;
var_dump($val);
var_dump(boolval($val));
if (0) {
echo 'true';
} else {
echo 'false';
}
?>
</pre>
〇swith文(JSとの違い)
9章 01_switch.phpより
< h1 > switch文1</ >
<? php
$num = '東京';//←文字型は数値型だと[0]の扱いになるらしい!
// ↑JSだと厳密等価演算子を使用していたが、
echo '<h2>1回目の出力</h2>';
switch ($num) {
case 0:
echo '0の処理';
break;
case 1:
echo '1の処理';
break;
case 2:
echo '2の処理';
break;
case 3:
echo '3の処理';
break;
default:
echo '該当なしの処理';
break;
}
echo '<h2>2回目の出力</h2>';
?>
// ↑ブラウザ表示は'0の処理'
※星出力問題をPHP仕様に変更する問題も出題された
JSで記述されているコードをPHPで使用できるコードに変換するだけの作業
<!DOCTYPE html>
<html lang="ja"><head>
<title>for文</title>
</head>
<body>
<h1>for文</h1>
<h2>問題1</h2>
<p>────────ココカラ</p>
<div id="display1">
<?php
$star = '';
// for文を記述して解答
for ($i = 0; $i < 5; ++$i)
// iは0から設定、0~4の順番で横に表示させる。
//++iはカウントアップさせるという意味
{
$star .= '★';
echo '★';
}
?></div>
<p>────────ココマデ</p>
<h2>問題2</h2>
<p>────────ココカラ</p>
<div id="display2">
<?php
$star = '';
// for文を記述して解答
for ($i = 0; $i < 5; ++$i)
//0~4(0番目を含むことに注意)の順番で横に表示させる。
{
for ($j = 0; $j < 5; $j++)
//行を管理。この場合は0~4行目(0行目を含むことに注意)まで設定。
{
$star .= '★';
//★を横に5つ、5行並べる
};
$star .= '<br>';
//ブラウザ・コンソール上で★5文字毎に改行する。
};
echo $star;
?></div>
<p>────────ココマデ</p>
<h2>問題3</h2>
<p>────────ココカラ</p>
<div id="display3">
<?php
$star = '';
// for文を記述して解答
for ($i = 0; $i < 6; ++$i)
//iは0から設定、0~5の順番で横に表示させる。
{
for ($j = 0; $j < $i; ++$j)
//jは0から設定、i番目未満を行にそろえる。
//i=0の時無し。i=1の時j=0、i=2の時j=0,1、i=3の時j=0,1,2、
//i=4の時j=0,1,2,3、i=5の時j=0,1,2,3,4
{ {
$star .= '★';
}
}
$star .= '<br>';
//ブラウザ・コンソール上で行の最後毎に改行する。
}
echo $star;
?></div>
<p>────────ココマデ</p>
<h2>問題4</h2>
<p>────────ココカラ</p>
<div id="display4">
<?php
$star = '';
// for文を記述して解答
for ($i = 0; $i < 5; ++$i) {
for ($j = 0; $j < $i; ++$j) {
$star .= '★';
}
$star .= '☆<br>';
//改行するタイミングに☆をつける
//0行目は☆1、1行目は★1、☆1、2行目は★2、☆1・・・
};
echo $star;
?></div>
<p>────────ココマデ</p>
<h2>問題5</h2>
<p>────────ココカラ</p>
<div id="display5">
<?php
// 問題5解答記述欄
$star = '';
// for文を記述して解答
for ($i = 0; $i < 5; $i++)
//0番目~4番目
{
for ($j = 0; $j < 5; $j++)
//0行目から4行目
{
if ($j != $i)
// 不等価演算子「!=」jとi、等しくなければtrue、等しければfalse
//!外すと無限処理発動 注意
{
$star .= '★';
} else {
$star .= '☆';
}
}
$star .= '<br>';
};
echo $star;
?></div>
<p>────────ココマデ</p>
<h2>問題6</h2>
<p>────────ココカラ</p>
<div id="display6">
<?php
$star = '';
// for文を記述して解答
for ($i = 0; $i < 5; ++$i) {
for ($j = 5; $i < $j; --$j)
//jのスタートを5に設定。jはカウントダウン。
//問3の逆バージョン
{
$star .= '★';
}
$star .= '<br>';
}
echo $star;
?></div>
<p>────────ココマデ</p>
<h2>問題7</h2>
<p>────────ココカラ</p>
<div id="display7">
<?php
$star = '';
// for文を記述して解答
for ($i = 1; $i <= 25; $i++)
//星を25個(5*5)横に並べていることをイメージ
//1個からカウントアップ
{
if ($i % 2 == 0) {
$star .= '☆';
}
//iを2で割ったときに余りがある時は★
else {
$star .= '★';
}
//そうじゃないときは☆
if ($i % 5 == 0) {
$star .= '<br>';
};
//iを5で割ったときに余りがないときは改行。
//要は5番目になったときに改行
};
echo $star;
?></div>
<p>────────ココマデ</p>
</body>
</html>