ITコラム

PHP 文字列 変換 intval

PHP

2019.05.14

PHP【文字列】数値に変換

PHP では、変数を扱う際に データ型の指定や変換が自動的に行われるので、普段はデータ型を意識しないことが多いですが、比較演算子を使用する場合等、データ型の自動変換が上手く働かない場合もあり、そのような場合はデータ型の変換が必要です。
今回は PHP で 文字列から数値へデータ型を変換する方法を紹介します。
 
尚、本サイトでは XAMPP( ザンプ )という開発環境を使用しています。
XAMPP のインストール方法や起動方法については以下の記事を
ご参照下さい。
PHP【 開発環境 】XAMPP インストール
PHP【 開発環境 】XAMPP の使い方

最終更新日:2019年5月14日

目次

1.データ型を指定してキャスト
2.intval でキャスト
 

1.データ型を指定してキャスト

データ型を変換することをキャストするとも言います。

キャストする方法としてわかりやすいのが、明示的にデータ型を指定する方法です。

次のように、括弧内にデータ型を記述して指定します。

( int ) $string

文字列変数 $string の前に「 (int) 」を記述すると、$string が整数型にキャストされます。

変数が文字列以外のデータ型である場合も同様に、指定したデータ型にキャストされます。

 
このようにデータ型を指定してキャストする場合、PHP では主に次のような指定の種類があります。

(int) : 整数型へキャスト
(float)、(double) : 浮動小数点数型へキャスト
(bool) : 論理型へキャスト
(string) : 文字列型へキャスト
(array) : 配列型へキャスト
(object) : オブジェクト型へキャスト

 

データ型を指定してキャストするサンプル

データ型を指定して、文字列を数値にキャストしてみます。

下記のようなソースファイルを作成して ブラウザからアクセスすると、次のような表示になります。
( ソースファイルの作成方法についてはソースファイルを作成を、サーバの起動方法等についてはサーバを起動を、それぞれご参照下さい。)

<pre>
<?php

  $str1 = "10";
  var_dump($str1);
  var_dump((int) $str1);
  
  $str2 = "99.999";
  var_dump((int) $str2);
  var_dump((float) $str2);

?>
</pre>

var_dump 関数についてはvar_dumpをご参照下さい。

「 string(2) “10” 」は string( 文字列型 )の「 10 」という意味です( この場合は括弧内の 2 はサイズを表しています )。
「 int(10) 」は int( 整数型 )の「 10 」、「 float(99.999) 」は float( 浮動小数点数型 )の「 99.999 」を意味しています。

var_dump 関数の代わりに echo で出力すると、「 10 」「 10 」「 99 」「 99.999 」と値のみが表示されます。
 
また、「 (int) “99.999” 」のように、小数を含む数字を整数型の「 (int) 」でキャストすると、小数点以下が切り捨てられてしまいます。
 
尚、<pre> ~ </pre> はデータを改行して出力するために記述しています。

▲目次へ戻る

 

2.intval でキャスト

intval 関数を使用して文字列を数値にキャストする方法もあります。

intval 関数は、データを整数型にキャストする関数です。

実行すると、整数型にキャストされた値が返ります。

intval 関数は 次のように記述して使用します。

intval ( データ [, 基数 ] ) ;

第 1 引数には、キャストの対象となるデータを指定します。

第 2 引数には、基数( 10(=10進数)、16(=16進数) など )を指定することができます。
基数を指定しない場合は 10進数でキャストされますが、例外的に、キャストの対象となるデータが 「 0x 」で始まる数値の場合は 16進数でキャストされ、「 0 」で始まる数値の場合は 8進数でキャストされます。

intval のサンプル

intval 関数を使用して 文字列型を整数型にキャストしてみます。

下記のようなソースファイルを作成して ブラウザからアクセスすると、次のような表示になります。
( ソースファイルの作成方法についてはソースファイルを作成を、サーバの起動方法等についてはサーバを起動を、それぞれご参照下さい。)

<pre>
<?php

  $str1 = "033";
  $int1 = 033;
  var_dump(intval($str1));
  var_dump(intval($int1));

  $str2 = "0x11";
  $int2 = 0x11;
  var_dump(intval($str2));
  var_dump(intval($int2));

  var_dump(intval("1回"));
  var_dump(intval("10page"));
  var_dump(intval("9999番555"));
  var_dump(intval("no.1"));

?>
</pre>

文字列から数値へのキャストという点では余談になりますが、先頭が 0 や 0x の数値を intval 関数でキャストすると、 8進数や 16進数がデフォルトの基数としてキャストされます。

0 から始まる文字列は、0 以外の数字が現れるまで 0 が除外され、0x から始まる文字列は、x を数字以外の文字として認識して、数字以外の文字が現れるまでの数字(この場合は 0 )が整数型にキャストされます。

「 1回 」や「 9999番555 」も同様に、先頭から数字以外の文字が現れるまでの数字のみが整数型にキャストされます。

「 no.1 」のように 数字以外の文字で始まる文字列は、キャストされずに 0 が返ります。
( 配列やオブジェクトを指定した場合もキャストは行われず、空の配列の場合は 0 、空でない配列やオブジェクトの場合は 1 が返ります。)

上のサンプルにはありませんが、小数を含む数字を intval 関数でキャストすると、小数点以下が切り捨てられて整数が返ります。

var_dump 関数についてはvar_dumpをご参照下さい。

また、<pre> ~ </pre> はデータを改行して出力するために記述しています。

▲目次へ戻る

SHARE

ITコラムのおすすめ記事

最新記事

無料相談する

INTERNOUS,inc. All rights reserved.