<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=700662253386511&ev=PageView&noscript=1" />

is_numberじゃない?phpの数値判定を簡単理解で初心者脱出

つぶらや
書いた人 つぶらや


侍エンジニア塾ブログは、未経験からWebアプリ開発と仕事獲得をサポートする
侍エンジニア塾のオウンドメディアです。
プログラミング学習を覗き見

こんにちは!独学プログラマー&ライターのつぶらやです。

phpを学んで少し経った頃の私に、数値を判定する機会が訪れました。

is_nullという空文字判定の機能を知ったばかりの私は、考えました。

is_nullでnullが判定できるなら、is_numberという関数もあるのでは??

・・・得意気に検索してみたのですが、is_numberという関数は存在しませんでした。

私が探していた関数は、is_numericという関数でした。

初心者の頃はこんな事を繰り返していました。

私と同じようにis_number関数が存在すると思ってここにたどり着いた方もいるかもしれませんので、今回は、数値のチェック関数についてお話しようと思います。

そもそも数値のチェックが必要な理由

phpは、型の宣言が必要ないプログラムと呼ばれたりもします。

型とは、変数の中に代入する値の種類を表します。
phpにも型は存在します。

int ・・・1や100などの整数型。
float/double・・・浮動小数点数です。ざっくり言うと少数です。
string・・・りんご、ばなな、などの文字列です
boolean・・・trueかfalseのどちらかです。

ただ、次のテストコードを見てください。

■結果

型の宣言も必要なく、同じ変数にどんな値でも追加する事が出来ました。

すごく便利じゃない!?

そう思われましたか?

でも、例えば変数同士の計算が発生した以下の場合などはどうでしょうか。

■結果

数値と文字列を足すと文字列は無視されますので、結果は100です。

テストの点数を足したい場合は、両方とも数値が入ってくる!当たり前じゃん!意地悪な問題だな、と思われたかもしれませんが、プログラムではそういった当たり前は通じません。

$test_english_resultが数値でない場合は、計算をするべきではないのです。

バグやユーザーの操作で、自分が思った以外の数値が渡される場合もあります。

そんな時にチェックを行ってくれる関数が有効です。

今回はis_numericというものを使ってみます。

◆数値チェックの結果が正(ture)の場合

■結果

◆数値チェックの結果が偽(false)の場合

■結果

プログラムでは、変数の中身や渡された値が、数値なのか文字列なのか判定する場面が多く存在します。

また、それらを確認する為にphpには色々な内部関数(ビルトイン関数)というphpにあらかじめ準備されている関数があります。

is_numericも内部関数です。

※内部関数以外に、ユーザー定義関数という自由に設定出来る関数があります。

次の項目では、数値チェックのための内部関数の説明をしていこうと思います。

これだけ覚える!php数値チェック

それでは、これだけは覚えおくときっと役に立つphp数値チェックの内部関数を書いていきます。

is_numeric

数値であるかどうかを判断します。

型が文字列であっても、数値として判断される部分が重要です。

以下の場合は全てtrue(正)が返ってきます。

■結果

以下の場合は全てfalse(偽)が返ってきます。

■結果

is_int

整数型intかどうかを判定します。

’99’などの文字列はfalseとなります。

以下の場合はtrue(正)が返ってきます。

■結果

以下の場合は全てfalse(偽)が返ってきます。

■結果

ctype_digit

文字列stringかどうかを判定します。

is_numericと違う点は、string文字列でない場合、falseになってしまう事です。

以下の場合はtrue(正)が返ってきます。

■結果

以下の場合は全てfalse(偽)が返ってきます。

■結果

phpの数値比較の落とし穴

最後に数値を比較する場合に少し戸惑う事もあるかも!というお話をさせて頂きます。

テストコードを見てください。

■結果

0という数値とNoGoodという文字列を比べているんだからNGになるでしょう!と思いましたか?

普通そう思いますよね。実は以下のphpの比較演算子のルールでは以下のようなものがあるのです。

整数値を文字列と比較したり、比較に数値形式の文字が含まれる場合は、文字列が 数値に変換され、 数値としての比較を行います

参考:http://www.php.net/manual/ja/language.operators.comparison.php

この点を知らないと、予期せぬ値が変数に入ってしまった時に慌てることになるのです。

実際慌てたのは…私です。

まとめ

今回はis_numericをはじめとする、phpの数値チェック全般についてお話いたしました。

関数の正式な名前がわからなくても、自分の悩みや単語をすべて検索窓に入れれば、今の時代誰かの同じような疑問から自分の目的にたどり着く事もできます。

参考書しか学ぶ方法がなかった時代から考えるとすごく恵まれています。

大事なのはあきらめずに少しずつでも進むことかなと思います。

それではまた。


33歳、未経験だった僕がフリーエンジニアになれた理由
現在フリーでWEBエンジニアをやられている濱口直行さん。33歳で、プログラミングを学び始め、約半年という短い期間で独立までされた学習ログを余すことなくインタビューさせていただきました。

プログラミングを学習中の方はもちろん、独立をお考えの方まで幅広く活用できる記事になっています。この機会に是非活用していただければと思います。


現役フリーランスエンジニアによる無料体験レッスン実施中!

もし、あなたが、

  • 経験、年齢、学歴に不安がある
  • 挫折しない学習方法が知りたい
  • アプリ開発で困っている
  • エンジニアの”生”の声が聞きたい!
  • 仕事獲得の仕方がわからない
  • エンジニアに転職したいが何をすればいいかわからない

など、プログラミング学習やキャリアのことでお困りであれば、まずは『無料体験レッスン』にお申し込み下さい。

あなたにとって、最適の解決策をご提案させていただきます。

詳しくは下の画像から詳しいサービス内容をご確認ください。

cta_mtm3

非常識な結果を出した卒業生

活躍する現役エンジニア

人気記事セレクション

LINEで送る

この記事が気に入ったら
いいね!をしてフォローしよう

最新情報をお届けします

書いた人

つぶらや

つぶらや

独学PG&SE、東京在住30代女性。
誰でもプログラマーになれるがモットーで、わかりやすい記事を目指しています。
趣味:酒、遊び人の観察
tuburaya.satomin@outlook.jp

preload imagepreload image