ITHACK
~ みんなのIT部門 ~

【PHP】キャスト(型変換) – 文字列型を数値型に変換する

プログラミングで文字列を数値型に変換したい場合、キャストと呼ばれる仕組みで型を変換します。
ここでは初心者向けにキャストについて解説します。

  • キャスト(型の変換)

キャストとは

キャストとは『型を変換する』ことです。
例えば、文字列型の数字を数値型に変換したり、浮動小数点数型を整数型に変換することです。
型については次の記事をご覧ください。

基本構文

キャストの基本構文は次のようになります。

(型) $変数名または値

サンプルコード

例として、3パターンのサンプルコードをご覧ください。

文字列型を整数型に変換する

<?php

// 文字列型
$moji = '1234';
// 文字列型の$mojiの値を整数型に変換
$num = (int) $moji;

// $mojiの型と値を出力
echo '$moji (type)  -> '.gettype($moji)."\n";
echo '$moji (value) -> '.$moji."\n";
// $numの型と値を出力
echo '$num  (type)  -> '.gettype($num)."\n";
echo '$num  (value) -> '.$num."\n";

?>
$moji (type)  -> string
$moji (value) -> 1234
$num  (type)  -> integer
$num  (value) -> 1234

6行目で文字列型の$mojiを整数型にキャストして、$numに代入しています。
実行結果から$mojiは文字列型(string)の1234で、$numは整数型(integer)の1234であることが分かります。

なお、整数型の正式表記はintegerですが、intと省略して記述できます。

文字列型を浮動小数点数型に変換する

文字列に小数点数以下が含まれる場合、整数型への変換すると小数点数以下は切り捨てられます。
小数点数以下も数値として変換したい場合は、浮動小数点数型(floatもしくはdouble)に変換しましょう。

<?php

// 文字列型
$moji = '123.987';
// 文字列型の$mojiの値を整数型に変換
$num1 = (int) $moji;
// 文字列型の$mojiの値を整浮動小数点数型に変換
$num2 = (double) $moji;

// $mojiの型と値を出力
echo '$moji (type)  -> '.gettype($moji)."\n";
echo '$moji (value) -> '.$moji."\n";
// $num1の型と値を出力
echo '$num1 (type)  -> '.gettype($num1)."\n";
echo '$num1 (value) -> '.$num1."\n";
// $num2の型と値を出力
echo '$num2 (type)  -> '.gettype($num2)."\n";
echo '$num2 (value) -> '.$num2."\n";

?>
$moji (type)  -> string
$moji (value) -> 123.987
$num1 (type)  -> integer
$num1 (value) -> 123
$num2 (type)  -> double
$num2 (value) -> 123.987

キャストの比較のため、$num1$num2にそれぞれ整数型と浮動小数点数型でキャストした値を代入しています。

実行結果では$num1は小数点数以下が切り捨てられた値、$num2は小数点数以下も含む値が記憶されていることが分かります。

数値型(整数型・浮動小数点数型)を文字列型に変換する

<?php

// 整数型
$num1 = 123;
// 浮動小数点数型
$num2 = 123.987;

// 整数型の$num1の値を文字列型に変換
$moji1 = (string) $num1;
// 浮動小数点数型の$num2の値を文字列型に変換
$moji2 = (string) $num2;

// $num1の型と値を出力
echo '$num1  (type)  -> '.gettype($num1)."\n";
echo '$num1  (value) -> '.$num1."\n";
// $num2の型と値を出力
echo '$num2  (type)  -> '.gettype($num2)."\n";
echo '$num2  (value) -> '.$num2."\n";
// $moji1の型と値を出力
echo '$moji1 (type)  -> '.gettype($moji1)."\n";
echo '$moji1 (value) -> '.$moji1."\n";
// $moji2の型と値を出力
echo '$moji2 (type)  -> '.gettype($moji2)."\n";
echo '$moji2 (value) -> '.$moji2."\n";

?>
$num1  (type)  -> integer
$num1  (value) -> 123
$num2  (type)  -> double
$num2  (value) -> 123.987
$moji1 (type)  -> string
$moji1 (value) -> 123
$moji2 (type)  -> string
$moji2 (value) -> 123.987

9行目と11行目で文字列型にキャストしています。
実行結果から文字列型にキャストできていることが分かります。

数字以外を含む文字列型を変換する

数字以外の文字を含む文字列を数値型(整数型・浮動小数点数型)にキャストする場合、文字を数値に変換することはできません。

そのため、先頭の文字から数値に変換され、数字以外の文字以降は変換されず、先頭が数字以外の文字の場合は、0になります。

<?php

// パターン1(最後に文字がある)
$moji1 = '123A';
// パターン2(途中に文字がある)
$moji2 = '12A3';
// パターン3(最初に文字がある)
$moji3 = 'A123';

// $moji1を整数型に変換して値を出力
$num1 = (int) $moji1;
echo '$num1 (value) -> '.$num1."\n";

// $moji2を整数型に変換して値を出力
$num2 = (int) $moji2;
echo '$num2 (value) -> '.$num2."\n";

// $moji3を整数型に変換して値を出力
$num3 = (int) $moji3;
echo '$num3 (value) -> '.$num3."\n";

?>
$num1 (value) -> 123
$num2 (value) -> 12
$num3 (value) -> 0

実行結果からいずれのパターンもAという文字までがキャストされていることが分かります。
※ 浮動小数点数型の変換も同じようになります。

演習問題

問題1

次の実行結果になるプログラムを作成してください。
なお、下記の条件を満たすものとします。

  • 文字列の"987"を$textに記憶
  • $textを整数型にキャストして$numberに記憶
$number (type)  -> integer
$number (value) -> 987

問題2

次の実行結果になるプログラムを作成してください。
なお、下記の条件を満たすものとします。

  • 文字列の"987.543"を$textに記憶
  • $textを浮動小数点数型にキャストして$numberに記憶
$number (type)  -> double
$number (value) -> 987.543

問題3

次の実行結果になるプログラムを作成してください。
なお、下記の条件を満たすものとします。

  • 整数型の987を$numberに記憶
  • $numberを文字列型にキャストして$textに記憶
$text (type)  -> string
$text (value) -> 987

問題4

次の実行結果になるプログラムを作成してください。
なお、下記の条件を満たすものとします。

  • 浮動小数点数型の987を$numberに記憶
  • $numberを文字列型にキャストして$textに記憶
$text (type)  -> string
$text (value) -> 987.543

まとめ

キャストは値を扱うプログラムでは基本の知識です。
この動作を知っていることで、期待通りの処理結果を得るプログラムを作成できるようになります。

なお、本記事で紹介したキャストは『明示的なキャスト』とも呼ばれ、それに対して『暗黙のキャスト』と呼ばれるキャストがあります。
そちらについては、次の記事で解説していますのでご覧ください。