PHPのintval関数で文字列を数値に変換する方法

20/01/11 17:11:23     20/01/11 17:11:23

intval関数は値を整数型に変換する関数です。

基本的なintvalの使い方は下端ですが、少し応用的な使い方やintval関数と同じようなことができるコードもあるので、それらについても紹介していきます。

intval関数で文字列を数値に変換する

まずintval関数の基本構文は以下です。

intval(値[,基数])

この構文を使用したサンプルコードは以下です。

<?php
$num = "12345";
var_dump($num);
echo "<br>";
var_dump(intval($num));
?>

上記のコードを実行すると、以下のようにコンソール出力されます。

string(5) “12345”
int(12345)

もともと数字を文字列として扱っていましたが、intvalで数値に変換して出力しています。その結果、string型からint型に変換されました。このように引数に指定するだけで変換できるのですが、デフォルトだと10進数に変換されるようになっています。

intvalは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)

それぞれの進数に変換されました。普通は10進数以外使用しないかもしれませんが、一応仕様上可能なことは知っておくと良いでしょう。

intval関数が使用できない例

intval関数は文字列を数値に変換できるということでしたが、文字列に数字以外が入っている場合変換できません。以下のサンプルコードのようになります。

<?php
$str = "あいうえお";

var_dump(intval($str));
?>

この場合出力結果は以下のようになります。

int(0)

数字以外の文字は数値に変換することができないので、0が返ってくる仕様になっています。また、文字列が空の場合も同様になります。一応サンプルコードを紹介しておくと、以下のようになります。

<?php
$str = "";

var_dump(intval($str));
?>

この場合も、上と同様に0が返ってきます。ただし型自体はintに変換されるので、値こそなくなっていますが、型の変換にはある意味成功しています。

intval関数は配列で使うと独特な動きをする

intval関数は基本的に配列にも使用できません。使用すると、以下のように独特な仕様で値を返します。

<?php
$nums = ["1","2"];
$ary = [];

var_dump(intval($nums));//要素がある場合
var_dump(intval($ary));//要素がない場合
?>

このコードを実行すると、以下のように出力されます。

int(1)
int(0)

まず配列に要素が入っている場合、中身に関係なく「1」が返ってきます。逆に配列が空の場合、「0」が返ってきます。

booleanにも使えない

intval関数はbooleanにも使用できません。使用すると以下のようになります。

<?php
var_dump(intval(true));
var_dump(intval(false));
?>

これを実行すると以下のようになります。

int(1)
int(0)

trueなら1、falseなら0を返しています。このように一応trueとfalseの判定に使えなくもないのですが、あまりintval関数でbooleanの判定を行うことはないでしょう。

小数点以下の切り捨てに使える

intval関数は整数に変換する関数です。なので文字列を数値にするだけでなく、小数点以下を含む数値を整数に変換する目的で使用されることもあります。サンプルコードは以下です。

<?php
$num = 3.14159265359;

var_dump(intval($num));
?>

これを実行すると「3」が出力されます。小数点以下が切り捨てられました。ちなみについでですが、符号が付いている場合も問題なく変換できます。サンプルコードは以下です。

<?php
$max_num = "+20";
$min_num = "-20";

var_dump(intval($max_num));
var_dump(intval($min_num));
?>

このコードを実行すると、以下のように出力されます。

int(20)
int(-20)

+の場合符号は省略されますが、-の場合そのまま残っています。いずれにしても、意図している形に変換されているかと思います。

キャストを使って文字列を整数に変換する

intval関数を使用せず、キャストによって文字列を整数に変換することも可能です。キャストの基本構文は以下です。

(int)値

サンプルコードは以下です。

<?php
$num = "12345";
var_dump($num);
echo "<br>";
var_dump((int)$num);
?>

このコードを実行すると以下のように出力されます。

string(5) “12345”
int(12345)

intval関数を使用したときと同じように、型が変換されています。どちらを使っても同じなのですが、あえて違いを上げるとすればintval関数は基数を指定できます。

他には、上でも説明した通り数値以外を指定した際に0などが戻ってくる仕様になっています。この辺はキャストにはない仕様です。単純に10進数に変換する以外の機能を使いたい場合はintval関数を使った方が良いかもしれませんが、10進数に変換するだけなら普通にキャストした方がコードも短くシンプルなので良いかと思います。

条件判定を行ってから変換処理を行う

文字列に含まれている文字が数字だけの場合のみ変換処理を行う、といったコードが一般的です。サンプルコードは以下のようになります。

<?php
$num = "123a";

if(is_numeric($num)){
    echo intval($num);
}else{
    echo "変換できません";
}
?>

上記のコードを実行すると、「変換できません」と出力されます。if文の中でis_numeric関数を使用していますが、この関数は文字列の中に数値以外が含まれていないかどうかをチェックする関数です。

文字列が数字だけで構成されている場合はtrueを、数字以外の文字が含まれている場合はfalseを返します。上のサンプルコードではaが含まれているので、falseを返します。

falseを返したのでif文は実行されず、そのままelse文が実行されます。その結果、「変換できません」と出力されました。このように、条件設定して条件に合致する場合のみ整数型に変換すると設計上安全です。

以上、intval関数で文字列を数字に変換する方法、キャストを使う方法について紹介しました。intval関数は一応booleanの判定などにも使えますが、メインの用途ではないため、コードの可読性を考えてもメインの用途以外には使用しない方が良いでしょう。

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する