1. ホーム
  2. PHP

【PHP】型変換(キャスト)の使い方|intval・floatval・(int) で文字列と数値を変換する

Share

フォームから受け取った「"100"」を数値として計算したい、小数の文字列を整数にしたい——PHP ではこうした型変換(キャスト)が頻繁に出てきます。PHP は文字列と数値をある程度自動で変換してくれますが、意図しない結果やバグを避けるには、明示的に型を変える方法を知っておくのが安全です。この記事では、(int) などのキャスト演算子と intval()floatval()strval()settype() といった関数の使い方、文字列から数値への変換のクセ、つまずきやすいポイントまで解説します。

PHP の型変換とは

型変換とは、値の種類(型)を別の型に変えることです。たとえば文字列の "100" を整数の 100 にしたり、数値を文字列にしたりします。PHP には主に2つのやり方があります。1つは (int) のように型名をカッコで前に付けるキャスト演算子、もう1つは intval() のような変換関数です。代表的なものを一覧で見てみましょう。

変換先の型キャスト演算子関数
整数(int)(int) / (integer)intval()
浮動小数点数(float)(float) / (double)floatval()
文字列(string)(string)strval()
真偽値(bool)(bool) / (boolean)boolval()
配列(array)(array)

整数への変換(int)

整数に変換するには (int) を付けるか、intval() を使います。小数を渡すと切り捨てられ、四捨五入はされません。

cast.php
<?php
$a = (int) "100";   // 100(文字列 → 整数)
$b = (int) 3.9;     // 3(小数は切り捨て)
$c = intval("42");  // 42(関数でも同じ結果)

文字列を整数に変換するとき、PHP は先頭から数字として読める部分だけを取り出します。途中に数字以外が現れるとそこで読み取りをやめ、数字で始まらない文字列は 0 になります。この挙動はよくハマるポイントなので、具体例で確認しておきましょう。

cast.php
<?php
(int) "123abc";  // 123(数字の部分まで読む)
(int) "abc123";  // 0(数字で始まらないので0)
(int) "12.8kg";  // 12(小数点以降は別文字扱いで切り捨て)
(int) "";        // 0(空文字は0)

intval() には第2引数で基数(何進数として読むか)を指定できる、という関数ならではの特徴もあります。16進数の文字列を変換したいときなどに使います。

cast.php
<?php
intval("0xFF", 16); // 255(16進数として解釈)
intval("100", 2);   // 4(2進数の100 = 10進数の4)

小数への変換(float)

小数を含む数値にしたいときは (float) または floatval() を使います。整数への変換と同じく、先頭から数値として読める部分を取り出します。

cast.php
<?php
(float) "3.14";      // 3.14
floatval("12.5円");  // 12.5
(float) "1,000";     // 1(カンマは区切り文字として読めない)

3つ目の例のように、桁区切りのカンマは数値として認識されません"1,000" はカンマの前の 1 までしか読まれず、結果は 1 になります。フォームで桁区切り付きの金額を受け取る場合は、str_replace(",", "", $value) でカンマを取り除いてから変換しましょう。

文字列への変換(string)

数値を文字列にしたいときは (string) または strval() を使います。文字列を連結したり、出力したりする場面で使いますが、PHP では echo や文字列連結のときに自動変換されることも多いため、明示的に書く機会はそれほど多くありません。

cast.php
<?php
$num = 2026;
$str = (string) $num;   // "2026"
var_dump($str);          // string(4) "2026"

$price = strval(980);   // "980"

真偽値を文字列にすると、true"1"false空文字 "" になる点には注意が必要です。echo false; が何も表示されないのはこのためです。

真偽値への変換(bool)

(bool)boolval() で真偽値に変換できます。条件分岐の判定で重要なのが、どんな値が false になるかです。次の値はすべて false とみなされ、それ以外は true になります。

false になる値説明
0 / 0.0整数・小数のゼロ
"" / "0"空文字と、文字列の “0”
[]空の配列
null未定義・null

とくに文字列の "0"false になる点は見落としがちです。一方で "0.0""false" という文字列は(空でも “0” でもないため)true になります。

cast.php
<?php
var_dump((bool) "0");      // bool(false)
var_dump((bool) "0.0");    // bool(true)  ← "0" 以外の文字列
var_dump((bool) "false");  // bool(true)  ← 中身が "false" でも true
var_dump((bool) []);       // bool(false) 空配列

settype と gettype

キャスト演算子や変換関数は変換後の新しい値を返すのに対し、settype()変数そのものの型を直接変える関数です。第1引数に変数、第2引数に型名の文字列を渡します。現在の型を調べたいときは gettype() が使えます。

settype.php
<?php
$value = "50";
gettype($value);         // "string"

settype($value, "integer"); // $value 自体を整数に変える
gettype($value);         // "integer"
var_dump($value);         // int(50)

基本的には、元の値を残せる (int) などのキャストの方が安全で読みやすいため、まずはキャスト演算子か変換関数を使うのがおすすめです。型を完全に置き換えたい特別な場面でだけ settype() を検討するとよいでしょう。

変換結果が0になるときの原因

数値に変換したのに 0 になってしまうときは、元の文字列が数字で始まっていないことがほとんどです。全角数字("123")や、先頭にスペース以外の文字・記号が入っているケースが典型例です。

全角数字を扱う場合は、変換の前に mb_convert_kana() で半角に直しておきます。また、ユーザー入力をそのまま信用せず、変換後に is_numeric() で数値として妥当かを確認すると、不正な値の混入を防げます。「変換できたつもりが 0 だった」というバグは、入力値の中身を var_dump() で確認すると原因がつかみやすくなります。

まとめ

PHP の型変換は、キャスト演算子と変換関数の2通りで行えます。要点を整理します。

  • 整数は (int) / intval()、小数は (float) / floatval()、文字列は (string) / strval()
  • 文字列→数値は先頭から数字部分だけを読み、数字で始まらないと 0。小数は切り捨て。
  • 真偽値では 0"""0"[]nullfalse。文字列の "0" に注意。
  • settype() は変数自体の型を変える。型の確認は gettype()
  • 変換結果が 0 のときは、全角数字や先頭の文字を疑い is_numeric() で検証する。

フォーム入力を扱うときは「受け取ったら明示的に型変換する」を習慣にすると、計算ミスや比較の不具合を防げます。まずは (int)(float) を使い分けるところから始めてみてください。

参考ページ