PHPで数値を操作する方法
著者は、 Write for DOnations プログラムの一環として、 Open Sourcing Mental IllnessLtdを選択して寄付を受け取りました。
序章
プログラミングでは数字は非常に一般的です。 これらは、画面サイズの寸法、地理的な場所、お金、ポイント、ビデオで経過する時間、ゲームアバターの位置、数値コードの割り当てによる色などを表すために使用されます。
プログラミングで数学演算を効果的に実行できることは、数値を扱う頻度が高いため、開発するための重要なスキルです。 数学の高度な理解は確かにあなたがより良いプログラマーになるのを助けることができますが、それは前提条件ではありません。 数学のバックグラウンドがない場合は、数学を、達成したいことを達成するためのツールとして、そして論理的思考を向上させる方法として考えてみてください。
PHPでは、integersとfloatsの2つの数値データ型を使用します。
- 整数は、正、負、または0(…、
-1
,0
,1
、…)。 - 浮動小数点数、または浮動小数点数は、小数点を含む実数です(
9.0
また-2.25
).
このチュートリアルでは、PHPの数値データ型で使用できるさまざまな演算子と、PHPが「型ジャグリング」および組み込みの数学関数を処理する方法について説明します。
オペレーター
演算子は、1つ以上の値(またはプログラミング用語では式)を取り、別の値を生成するものです(構造自体が式になるように)。 演算子は、値に基づいてアクションを実行するようにプログラムに指示するなど、基本的な意思決定に使用されます。
代入演算子
最も基本的な演算子は代入演算子で、単一の等号です。 =
. この代入演算子は、変数の値を設定するときに使用されます。 変数は箱のようなものです。 多くの異なるものが箱に保管されるかもしれません。 ボックスに追加のアイテムが追加される場合があります。 ボックス内のアイテムは、並べ替えたり、それぞれにステッカーを貼ったりすることができます。 ボックスを空にして、新しいものをボックスに追加することもできます。 これは、コードで変数が使用されたときに起こることです。 変数には名前が付けられ、その名前付き変数には次の値が割り当てられます。
$box=3;
var_dump($box);
$box="Hello";
var_dump($box);
変数タイプと値を確認するには、 var_dump()
代わりに関数が使用されます echo
. 名前の付いた変数 $box
の値が 3
. その後、同じ $box
変数には、の新しい値が割り当てられます "Hello"
. これは、ボックスを空にして新しいものを追加するのと同じです。 今、 var_dump()
関数が呼び出されると、値に関するまったく異なる情報が得られます。 $box
変数:
Outputint(3)
string(5) "Hello"
最初の割り当ての後、 $box
変数には、の整数値が含まれます 3
. 2番目の割り当ての後、 $box
変数には、「Hello」に一致する5文字の文字列が含まれています。
私たちを作るために $box
もっと便利なのは、次のタイプの演算子を見てみましょう。
算術演算子
PHPには、電卓やペンや紙と同じようにコンピュータープログラムで機能する算術演算子があります。 注意すべき重要な側面は、操作に使用される記号です。 最も一般的な算術演算子を見てみましょう。
追加(+
):最初の値から始めて、その数値に次の値を追加します。 これは、数値自体または値を含む変数のいずれかを使用して実行できます。
$start=10;
var_dump($start+3);
結果は、次の式のsumです。
Outputint(13)
減算(-
):最初の値から開始し、前の値から次の値を減算または削除します。
$start=10;
var_dump($start-3);
結果は、この方程式のdifferenceです。
Outputint(7)
乗算(*
):最初の値から始めて、次の値を掛けます:
$start=10;
var_dump($start*3);
これは、最初の数値を2番目の数値と同じ回数加算するのと同じです。
$start=10;
var_dump($start+$start+$start);
どちらも同じ結果、方程式のproductを示します。
Outputint(30)
分割(/
):2番目の値を最初の値に何回入れることができますか:
$start=10;
var_dump($start/3);
結果は、次の方程式の商です。
Outputfloat(3.3333333333333)
この場合、3は10に均等に入らないため、結果は整数ではなく浮動小数点数として示されます。 加算することで、結果を整数値として返すようにPHPに指示できます。 (int)
、以降はすべて無視されます .
:
$start=10;
var_dump((int) $start/3);
結果を整数である整数として与える:
Outputint(3)
除算式の残りの値または余りが必要な場合、それはモジュロ(%
):
$start=10;
var_dump($start%3);
var_dump(3%$start);
最初 var_dump
前の除算式の余りを与えます。 方程式を逆にすると、モジュロは 3
10は3にゼロ回入り、元の3を余りとして残すためです。
Outputint(1)
int(3)
モジュロは、奇数行または偶数行に基づいてパターンを作成するときによく使用されます。 行の整数カウントが奇数か偶数かを判断するときは、次を使用します。 %2
:
var_dump(10%2);
var_dump(11%2);
偶数は2で割り切れるので、偶数の整数は常に0の結果になりますが、奇数の整数は均等に割り切れないので常に1の結果になります。
Outputint(0)
int(1)
PHPは複雑な計算をすばやく実行でき、必要な計算を作成するためのツールをさらに多く提供します。 指数、パーセンテージ、平方根、およびその他の多くの操作が可能です。 これらの数学関数のいくつかを見る前に、代入演算子と算術演算子を組み合わせた別のタイプの演算子を調べてみましょう。
算術代入演算子
リンゴが10個入ったバスケットがあるとします。 これをコードで表すために、次のように書くことができます $basket = 10
. 次に、追加の5つのリンゴを選び、バスケットに入れます。 整数を使用する代わりに 10
、の値を使用できます 10
に保存されます $basket
変数: $basket = $basket + 5
. これは技術的には正しいですが、かなり冗長です。 既存のバスケットにさらに5個のリンゴを追加したいだけです。 そこで、算術代入演算子が登場します。 変数を繰り返す代わりに、次のように書くことができます $basket += 5
. これは前の式とまったく同じように機能します。 コードに次のように指示します。
- の値を取る
$basket
- 追加
5
その値に - 新しい値をに再割り当てします
$basket
これと同じ原理を他の算術演算子で使用できます。
表現 | 結果($ i = 10と仮定) |
---|---|
$i += 5 |
10+5を追加します。 結果: $i = 15 |
$i -= 5 |
10-5を引く; 結果: $i = 5 |
$i *= 5 |
10*5を掛けます。 結果: $i = 50 |
$i /= 5 |
10/5を割ります。 結果: $i = 2 |
サミーがバスケットの中のリンゴのいくつかを切り刻むことにした場合、次のようなものを使用できます $basket -= 6
、これは整数を残します 9
に割り当てられた $basket
. これまでのところ、プログラムは次のようになっています。
$basket = 10;
$basket += 5;
$basket -= 6;
echo $basket;
いつ $basket
最終行にエコーされ、最終値が得られます。
Output9
サミーは一度にたくさんのリンゴを食べることができるかもしれませんが、私は一度に1つのリンゴしか食べることができません。
インクリメント演算子
数を増やすために 1
、PHPは、二重のプラス記号である個別のインクリメント演算子を提供します(++
). これは、変数を個別に(独自の行で)インクリメントするため、または式内で直接インクリメントするために使用できます。 アップルバスケットの例に戻りましょう。 $basket
変数は 9
:
++$basket;
echo $basket;
最初の行は現在の値(9)に1を加算し、次の行は結果を示します。
Output10
同じことを1行で行うことができます。
echo ++$basket;
最初に、現在の値(10)に1を加算し、次の行で結果を示します。
Output11
の値が $basket
もう一度出力されます:
echo $basket;
それは、 $basket
変数は、出力結果に追加されただけでなく、前の行で実際に更新されました。
Output11
前の各行では、変数の前にインクリメント演算子が使用されていました。 この事前にインクリメントされたアクションは、変数などの他のアクションの前に変数に適用されます。 echo
指図。 使用する ++$basket
書くのと同じです $basket += 1
. インクリメント演算子は、変数の後にポストインクリメントとして使用することもできます。 変数を個別に設定する場合は順序は関係ありませんが、式内で使用する場合は順序が重要になります。 同じ行を繰り返しましょう。今回は、変数の後にインクリメント演算子を置きます。
$basket++;
echo $basket;
最初の行は現在の値(11)に1を加算し、次の行は結果を示します。 これは、前の例のプリインクリメントラインとまったく同じように機能します。
Output12
ここで、ポストインクリメントされた値との違いに到達します。
echo $basket++;
The echo
値がインクリメントされる前にアクションが発生するため、2番目の結果 echo
まだの値を示しています $basket
1増加する前。
Output12
決勝 echo
コマンドは、変数が実際にインクリメントされた後に echo
処理されました:
echo $basket;
の最終的な値を示す $basket
:
Output13
インクリメント演算子に加えて、PHPは値を次のように減らす機能を提供します 1
デクリメント演算子を使用します。
デクリメント演算子
値を減らすには 1
、二重マイナス記号であるデクリメント演算子を使用できます(--
). インクリメント演算子と同様に、この演算子は変数の前または後に追加できますが、位置はプログラムの出力に影響を与える可能性があります。
echo --$basket; # Pre-decrement
echo $basket--; # Post-decrement
echo $basket;
最初の行は削除されます 1
13であった現在の値から echo
コマンドが実行されます。 次の行は echo
ポストデクリメント演算子が評価される前のコマンドで、出力は同じままにします。 もう一度、決勝 echo
の値が $basket
前の行で実際にデクリメントされ、値が減少しました。
Output12
12
11
演算子の優先順位が結果でどのように重要な役割を果たすかを検討するときは、演算子のこの順序を覚えておいてください。
演算子の優先順位
演算子のprecedenceは、2つの式を「緊密に」バインドする方法を指定します。 これは、「操作の順序」と呼ばれることがよくあります。 これは、さまざまな演算子がより重要になり、最初に適用されることを意味します。 数式を評価する場合、乗算と除算は常に加算と減算の前に実行されます。 例えば:
echo 1 + 5 * 3;
この式では、乗算(*
)演算子は加算よりも優先順位が高くなります(+
)演算子であるため、最初に評価されます。 5 * 3 = 15
. その後、加算は次のように実行されます。 1 + 15 = 16
. これにより、次の最終結果が得られます。 16
:
Output16
操作の順序に従わなかった場合は、 1 + 5
最初に評価され、次にその結果に乗算が適用され、次のようになります。 6 * 3 = 18
.
インクリメント演算子とデクリメント演算子は数値に適用できません。 それらは変数とともに使用されます。 ただし、その値をインクリメントまたはデクリメントする方程式に変数を追加することはできます。 これらのインクリメントまたはデクリメントされた変数が使用される場合、方程式はインクリメントまたはデクリメント操作の前または後に実行されます。
$my_num = 8;
echo 7 + $my_num++ + 9;
echo $my_num;
echo 7 + --$my_num + 9;
echo $my_num;
最初に echo
行、数式はの元の値を使用して実行されます $my_num
ポストインクリメント演算子が値を増やす前。 まるで書いたかのようです echo 7 + 8 + 9;
、これにより、 24
. 2番目から見る echo
それ $my_num
これで9に設定されます。 2番目の数式は、事前デクリメント操作の後に実行されます。つまり、 $my_num
は8に設定され、数式自体は同じです。 数式が実行された後、ポストデクリメント演算子が実行され、最終結果が得られます。 $my_num
変数:
Output24
9
24
8
グループ化操作
括弧は常に最高レベルの優先順位を持ち、操作をグループ化したり、優先順位を強制したりする方法を提供します。 たとえば、前の式に括弧を追加します。
echo (1 + 5) * 3;
括弧内の項目は乗算の前に評価されるため、結果は異なります。
Output18
数式の演算子の優先順位を要約すると、次のようになります。
- 括弧は左から右に評価されます。
- 乗算と除算は左から右に評価されます。
- 最終結果は、左から右への加算と減算を使用して評価されます。
タイプジャグリング
PHPは、変数が宣言または設定されるときに変数タイプを定義しません。 代わりに、変数のタイプは、変数が使用されるコンテキストによって決定されます。 使用できます var_dump()
タイプを含む変数の詳細を表示するには、次のようにします。
$my_var = 'string';
var_dump($my_var);
$my_var = 1;
var_dump($my_var);
文字列値が変数に割り当てられると、その変数は文字列になります。 次に、同じ変数に整数値が割り当てられると、整数になります。
Outputstring(6) "string"
int(1)
PHPは、方程式の評価に基づいてタイプも設定します。
$var1 = 1.2;
$var2 = 2;
$var3 = 12;
var_dump($var1 * $var2);
var_dump($var3 * $var2);
var_dump($var1, $var2, $var3);
どちらかのオペランドがfloatの場合、両方のオペランドがfloatとして評価され、最初のオペランドに示すように、結果はfloatになります。 var_dump
. それ以外の場合、オペランドは整数として解釈され、結果も整数になります。 var_dump
:
Outputfloat(2.4)
int(24)
float(1.2)
int(2)
int(12)
3番目から var_dump
これにより、オペランド自体のタイプが変更されないことがわかります。 唯一の変更点は、オペランドの評価方法と、結果として得られる式自体のタイプです。
文字列やブール値などの他のデータ型も数値に変換される場合があります。 これは多くの混乱を引き起こす可能性があるため、避けるのが最善です。 PHPは通知または警告を生成しますが、それでも変数を評価可能な型に「ジャグリング」するために最善を尽くします。 例えば:
表現 | 結果 | タイプジャグリング |
---|---|---|
2 * false |
0 | ブール値は整数に変換されます 0 |
2 * true |
2 | ブール値は整数に変換されます 1 |
2 * 'hi' |
0 | 文字列は整数に変換されます 0 |
2 * '1' |
2 | 文字列は整数に変換されます 1 |
PHPのタイピングを緩くすると、コードの記述が速く簡単になりますが、問題の追跡が難しくなることがよくあります。 アプリケーションで使用される変数タイプに注意してください。
数学関数
関数は、プログラムで繰り返し使用できるステートメントのブロックです。 PHP comes with many built-in functions that allow us to perform additional math calculations.
正の数と負の数の両方を処理する場合、数値の絶対値を取得できます。 abs
関数:
echo abs(-1.3);
これは無視します +
また -
数値の前にあり、数値自体を返します。
Output1.3
数値で推定する場合、またはfloatの整数値を取得する場合は、複数のオプションがあります。
echo round(1.3);
echo round(1.5);
echo ceil(1.3);
echo floor(1.5);
The round
関数は、最も近い整数を返します。 .5
より高い数に評価します。 The ceil
関数は常に切り上げられますが、 floor
関数は常に切り捨てられます:
Output1
2
2
1
どの円の比率も同じです。 これは真実であるため、円の円周は、その直径に次のような特別な数値を掛けることによって決定できます。 pi
(Π):
echo pi();
echo 4 * pi();
The pi
PHPの関数は、の最初の14桁を返します pi
、 以来 pi
は無理数です。つまり、その10進形式は決して終了しません。 この関数を使用して、直径4の円の円周を計算できます。
Output3.1415926535898
12.566370614359
コインを投げる場合でも、サイコロを振る場合でも、結果の目標が偶然である場合、ランダムな数字がツールを提供します。 PHPは rand
この予測不可能なランダムな結果を返す関数:
echo rand();
この関数は、0から getrandmax
マシン上で構成されています。 ランダム性を少し少なくする必要がある場合、または最大数を増やしたい場合は、最小値と最大値を包括的に指定できます。 ランダムな3桁の数字を返すには:
var_dump(rand(100, 999));
毎回これ rand
関数が呼び出されると、100から999までの3桁の数値が返されます。
乱数を返す計算は実際にはランダムではないため、セキュリティと暗号化に関しては、PHPはより暗号的に安全な関数を提供します。 カードのシャッフルや当選番号の抽選などの偏りのない結果に適した暗号化乱数を生成するには、 random_int
関数:
var_dump(random_int(-999, 999));
と random_int
包括的最小数と最大数を指定する必要があります。 両方 rand
と rand_int
負の数を受け入れます。
バイト文字列を取ることができるソルト、キー、または初期化ベクトルの暗号的に安全な値を生成する場合は、次を使用します。 random_bytes
指定された文字列の長さ:
var_dump(random_bytes(20));
毎回新しいランダムなバイト文字列を取得します。これは次のようになります。
Outputstring(20) "q8?Ud;??W?p4?C????"
PHPにはさらに多くの組み込み数学関数があります。 詳細については、php.netのドキュメントをご覧ください。
結論
このチュートリアルでは、整数および浮動小数点の数値データ型を操作するときに使用する多くの演算子について説明しました。 また、演算子の優先順位と位置が結果にどのように影響するかを示しました。 これらの結果は、PHPが変数タイプと発生する可能性のある問題を「ジャグリング」する方法に私たちをもたらしました。 最後に、組み込み関数の簡単な紹介により、アプリケーションで利用できる数学的な選択肢が広がりました。 他のデータ型の詳細については、PHPのデータ型についてを参照してください。