記事内にはプロモーションが含まれています

【PHP】is_numericの使い方やフォーマット処理を解説!数値判定と変換の決定版

【PHP】is_numericの使い方やフォーマット処理を解説!数値判定と変換の決定版 PHP

Webアプリケーション開発において、ユーザーからの入力値が「数値かどうか」をチェックしたり、金額を見やすく「カンマ区切り」で表示したりする処理は日常的に発生します。

PHPには数値を扱うための便利な関数が豊富に用意されていますが、is_numericis_intctype_digit など、似たような名前の関数が多く、どれを使えば良いのか迷ってしまうことも少なくありません。

特に、「文字列としての数字」をどう扱うかは、バグを生みやすいポイントでもあります。

この記事では、PHPにおける数値判定の基本から、number_format を使った表示形式の変更、型変換(キャスト)のベストプラクティスまで、実務で役立つ知識をサンプルコード付きで詳しく解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はこじんまりとしたプログラミングスクールを運営
  • モットーは「利他の精神」

数値かどうかを判定する is_numeric 関数の基本

PHPで変数が数値、または「数値形式の文字列」であるかを判定する際に最もよく使われるのが is_numeric 関数です。

まずはこの関数の挙動と、他の判定関数との決定的な違いについて理解しましょう。

is_numeric の基本的な使い方

is_numeric 関数は、引数が「数値」または「数値形式の文字列」であれば true を、それ以外なら false を返します。

<?php
$val1 = 123;         // 整数
$val2 = 3.14;        // 浮動小数点数
$val3 = "100";       // 数値形式の文字列
$val4 = "1,000";     // カンマ付き文字列(数値とはみなされない)
$val5 = "Hello";     // 文字列

var_dump(is_numeric($val1));
var_dump(is_numeric($val2));
var_dump(is_numeric($val3));
var_dump(is_numeric($val4));
var_dump(is_numeric($val5));
?>

実行結果

bool(true)
bool(true)
bool(true)
bool(false)
bool(false)

コードの解説

上記のコードでは、様々な型の値を is_numeric に渡して判定しています。

重要なポイントは、$val3 = "100" のような文字列型であっても、中身が数値として解釈できれば true になるという点です。

これにより、HTMLフォームから送信されたデータ(すべて文字列として受け取られる)が、数値として計算可能かを簡単にチェックすることができます。

一方で、$val4 のようにカンマが含まれる場合や、$val5 のような完全な文字列は false となります。

is_int や ctype_digit との違いと使い分け

「数値判定」と言っても、厳密には判定基準が異なる関数がいくつか存在します。
目的に応じて使い分ける必要があります。

関数名 判定基準 “123” (文字列) 123 (整数) 3.14 (少数)
is_numeric 数値または数値形式の文字列 true true true
is_int 厳密な整数型 (integer) のみ false true false
ctype_digit 数字のみで構成された文字列 true false (※注意) false

ctype_digit は、PHPのバージョンや引数の型によって挙動が直感的でない場合があるため、使用には注意が必要です(基本的には文字列型に対して使用します)。

もし、「計算に使える値なら何でもOK」という場合は is_numeric を、「プログラム内部で厳密に整数型として扱いたい」場合は is_int を使うのが一般的です。

数値を読みやすく整形する number_format

金額や統計データなど、桁数の多い数値を表示する際は、カンマ区切りや小数点以下の桁数指定を行う必要があります。

PHPでは number_format 関数を使うことで、これらのフォーマットを簡単に行うことができます。

3桁ごとのカンマ区切りを追加する

最も基本的な使い方は、引数に数値を渡すだけです。これだけで、自動的に3桁区切りのカンマが挿入されます。

<?php
$price = 1234567;

// カンマ区切りに変換
$formatted_price = number_format($price);

echo "価格:" . $formatted_price . "円";
?>

実行結果

価格:1,234,567円

コードの解説

number_format($price) を実行することで、整数 1234567 が文字列の "1,234,567" に変換されました。

この関数は、表示用に文字列を生成するためのものです。

計算に使用する前に適用してしまうと、カンマが邪魔をして数値として認識されなくなるため、必ず表示の直前に使用するようにしましょう。

小数点以下の桁数を指定する

number_format の第2引数に数値を指定すると、小数点以下の表示桁数を制御できます。
指定した桁数以降は四捨五入されます。

<?php
$num = 123.45678;

// 小数点第2位まで表示(第3位を四捨五入)
echo number_format($num, 2);
?>

実行結果

123.46

コードの解説

第2引数に 2 を指定したことで、小数点以下が2桁になるように整形されました。
元の値 ...456...6 が四捨五入され、末尾が 6 になっています。

消費税計算などで端数処理が必要な場合に非常に便利です。

文字列を数値に変換する(キャストとintval)

is_numeric で数値として扱えるとわかった文字列を、実際に計算可能な「数値型(intやfloat)」に変換したい場合があります。

主な方法は「キャスト(型変換)」と「関数(intvalなど)」の2通りです。

(int) や (float) によるキャスト

変数の前に (型名) を記述することで、その型に強制的に変換できます。これが最も高速で推奨される方法です。

<?php
$str_num = "100";
$str_float = "3.14";

// 整数型へキャスト
$int_val = (int)$str_num;

// 浮動小数点型へキャスト
$float_val = (float)$str_float;

var_dump($int_val);
var_dump($float_val);

// 計算してみる
echo "計算結果:" . ($int_val + 50);
?>

実行結果

int(100)
float(3.14)
計算結果:150

コードの解説

文字列 "100" が整数の 100 に、"3.14" が浮動小数点数の 3.14 に変換されています。

キャストを行うことで、型が明確になり、その後の計算処理での予期せぬエラーを防ぐことができます。

例えば、厳密な比較(===)を行いたい場合などは、事前にキャストしておくことが必須となります。

intval 関数を使う方法

intval 関数を使っても同様に整数化できますが、こちらは「基数(何進数か)」を指定できるという特徴があります。

<?php
$str = "100";

// 通常の変換
echo intval($str) . "\n";

// 2進数として解釈して変換("100" は 4 になる)
echo intval($str, 2);
?>

実行結果

100
4

コードの解説

通常の用途であれば (int) キャストで十分ですが、2進数や16進数などの文字列を10進数の整数に変換したい場合には intval が役立ちます。

なお、floatval という関数もありますが、こちらも (float) キャストと同様の働きをします。

配列が「数値配列」か「連想配列」かを見分ける方法

PHPの配列には、キーが自動的に振られる「インデックス配列(数値配列)」と、キーを自由に指定できる「連想配列」の区別が曖昧な部分があります。

JSON出力時などに、「配列として扱いたいのにオブジェクトになってしまう」といった問題を防ぐために、配列のタイプを判定したいことがあります。

array_is_list 関数(PHP 8.1以降)

最新のPHP環境であれば、array_is_list 関数を使うのが最も確実です。

この関数は、配列のキーが 0 から始まる連番の整数である場合(つまり純粋なリストである場合)に true を返します。

<?php
$list = ["Apple", "Banana", "Orange"]; // 純粋な配列
$assoc = ["id" => 1, "name" => "Apple"]; // 連想配列

// PHP 8.1以降で使用可能
if (function_exists('array_is_list')) {
    var_dump(array_is_list($list));
    var_dump(array_is_list($assoc));
}
?>

実行結果

bool(true)
bool(false)

コードの解説

$list はキーが 0, 1, 2 と続いているため true となり、$assoc はキーが文字列であるため false となります。

API開発などで、JSONの形式を [] (配列)にするか {} (オブジェクト)にするかを制御したい場合に、この判定が非常に重要になります。

PHPのスキルを活かして年収を上げる方法

以上、PHPのis_numericの使い方やフォーマット処理などについて解説してきました。

なお、PHPのスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。

PHPエンジニアの需要は非常に高く求人数・案件数も多いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。

なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。

今すぐ転職する気がなくとも、とりあえず転職エージェントに無料登録しておくだけで、スカウトが届いたり、思わぬ好待遇の求人情報が送られてきたりするというメリットがあります。

併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなPHPの案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。