こんにちは!エンジニアのノムラです。
PHPには、値を整数(int)型に変換するintval関数、キャスト演算子(int)というものがあります。
この記事では、
- (int)を使った変換
- intval関数を使った変換
- intvalの注意点
といった、基本的な整数型への変換方法から
- 型を判定してから変換する方法
などの、より実践的な方法まで、初心者にもわかりやすく解説していきたいと思います。
小数点以下の切り捨てなども行うことができるintval関数は、PHPの開発に非常に役立つ関数なので、しっかりマスターしていきましょう!
文字列を整数型に変換する
文字列を整数(int)型に変換するには、キャスト演算子(int)と使う方法と、intval関数を使う方法の2つがあります。
ここでは、それらの違いにも触れながら、基本的な使い方について解説していきたいと思います。
キャスト演算子(int)を使った変換
キャスト演算子とは、演算子の右にある値の型を、指定したデータ型に変換することができる演算子のことです。
(int)値
実際にサンプルコードを見てみましょう。
<?php $num = "12345"; var_dump($num); echo "<br>"; var_dump((int)$num); ?>
【出力結果】
string(5) "12345" int(12345)
var_dumpを使ってデータ型をみると、整数型に変換していない$numは文字列型で出力されています。
一方、(int)を使用して出力された$numは、データ型が整数型に変換されていることがわかります。
intval関数を使った変換
同じくintval関数でも、指定した値のデータ型を整数型に変換することができます。
intval(値[,基数])
実際に使ってみると以下のようになります。
<?php $num = "12345"; var_dump($num); echo "<br>"; var_dump(intval($num)); ?>
【出力結果】
string(5) "12345" int(12345)
intval関数でデータ型が変換され、$numの値が整数型になっていることがわかります。
intval関数で基数を指定して変換
キャスト演算子(int)では、10進数の整数型にしか変換できないことに対し、intval関数ではその他
基数(2進数、8進数、16進数)にも変換することが可能です。
基数とは、数値を表現していく際に位取りの基準となる数のことです。
普段私たちが生活で使っているのは10進数になり、10倍ごとに桁が上がっていくため、基数は10になります。
実際に使って確認していきましょう。
<?php $num = "100"; //指定しない(10進数) var_dump(intval($num)); //2進数 var_dump(intval($num,2)); //8進数 var_dump(intval($num,8)); //16進数 var_dump(intval($num,16)); ?>
【出力結果】
int(100) int(4) int(64) int(256)
それぞれ指定した基数にしたがって、$numのデータ型が整数型に変換されています。
基数を指定して変換する場合、変換する値は文字列型でなければ変換できないので注意してください。
intval関数の注意点
intval関数は、基数を指定して値を整数型に変換する便利な関数ですが、使い方を誤ると期待通りの結果が得られなくなってしまいます。
intval関数で、整数型へ変換がされない場合に考えられる問題点、注意点について解説します。
0が返ってきてしまう場合
値を整数型へ変換することが失敗した場合、0が返ってくることがあります。
<?php $str = "あいうえお"; var_dump(intval($str)); ?>
【出力結果】
int(0)
変換する文字列がすべて文字だった場合、変換が失敗し0が返ってきます。
変換する文字列が空やnullだった場合も同様です。
<?php $str = ""; var_dump(intval($str)); ?>
【出力結果】
int(0)
0が返ってきてしまう場合は、変換したい値に文字列が含まれていないか、空やnullになっていないか確認しましょう。
変換する値が配列だった場合
変換しようとした値が配列だった場合、配列の要素が存在すれば1が返り、存在しなければ0が返ってきます。
<?php $nums = ["1","2"]; $ary = []; var_dump(intval($nums));//要素がある場合 var_dump(intval($ary));//要素がない場合 ?>
【出力結果】
int(1) int(0)
要素がある場合は、要素の数に関係なく1が返ってくるため注意してください。
変換する値がboolean値だった場合
変換する値にboolean値が入っていた場合は、以下のような結果になります。
<?php var_dump(intval(true)); var_dump(intval(false)); ?>
【出力結果】
int(1) int(0)
trueだった場合1、falseだった場合は0が返ってきていることがわかります。
実践的なintval関数の使い方
intval関数の特徴や注意点を踏まえて、より実践的な使い方をみていきましょう。
小数点以下の切り捨て
浮動小数点数型(float型)の値を、intval関数を使って整数型に変換すると小数点以下は切り捨てられます。
<?php $num = 3.14159265359; var_dump(intval($num)); ?>
【出力結果】
3
小数点以下が切り捨てられ、整数に変換されていますね。
符号が付いた値の変換
「+」(プラス)や「-」(マイナス)などの、符号がついた数値の変換はどのようになるのでしょうか。
<?php $max_num = "+18"; $min_num = "-18"; var_dump(intval($max_num)); var_dump(intval($min_num)); ?>
【出力結果】
int(18) int(-18)
プラスの値の場合、符号が省略された形になり、マイナスの値の場合は符号がついて出力されています。
型を判定してから整数型に変換
文字列が数字だった場合のみ、整数型に変換したい場合は以下のようになります。
<?php $num = "123a"; if(is_numeric($num)){ echo intval($num); }else{ echo "変換できません"; } ?>
【出力結果】
変換できません
is_numeric関数を使って、値に数字以外が含まれていないかを調べます。
その結果、数字以外が含まれていなかった場合のみ、整数型に変換する条件を加えました。
上のサンプルコードでは、文字が含まれているため、変換されていません。
まとめ
キャスト関数(int)、intval関数を使ったデータ型の変換方法と注意点から、より実践的なintval関数の使い方まで解説しました。
intval関数は、PHPでの開発で非常に役に立つ関数のひとつです。
特徴と注意点をしっかり理解して、使いこなせるようにしていきましょう!