PHP 備忘録 | メシのタネ

PHP_Logo
このエントリーをはてなブックマークに追加

【PHP】条件分岐で困った時に使えそうな関数をピックアップしてみたよ!

 2015/06/04

PHPの勉強を始めたばかりの頃、条件分岐が良く分かりませんでした。今思えば、if文が何かわかっていないというより、if文で何を判断させて良いのか分からなかったような気がします。そんな条件分岐で困った時の為にすぐに使えそうな関数をピックアップしてみました。

値の有無



empty()

値が空かどうかを調べる関数です。こっちから覚えたので今でも使える時は大体迷わずこれを使いますが、変数に0や空文字がセットされている場合も値無しと判断されます。

isset()

こちらは変数に値がセットされているかどうかを調べる関数です。空文字や0が変数にセットされている場合は値有りと判断されます

strlen()

こちらは変数にセットされた値の長さを調べる関数です

試しに動かしてみてください。入力に文字を入れて実行を押せば実行できます。

文字列一致



str_pos()

こいつはややこしい関数で、これを覚えるならpreg_match覚えた方が良いです。個人的に、この関数嫌いです。strposは値が一致すれば値の一致した場所を数値で返し無ければfalseが返る。ここまでは良いとして一致する場所が0番目の場合があるので、falseは完全一致で聞かないといけないので、後で書きますが、僕はアホなのでだいぶあたまのなかがややこしくなります。

preg_match()

文字列というかパターンの一致を調べる関数です。使用する際に少しだけ頭使わないといけないのが面倒臭い所ですが、正規表現によるマッチングが出来るので、幅広く条件を扱う事が出来ます。正規表現とは、「4つの数値」とか「6つの文字列」とか「1つのなんか知らん文字」とかこういうのを一つの言い方にまとめたものです。表現の数はすんごいあるので、暇があったら覚えてみると良いと思います。とりあえずこの表現をを使ってパターンを作ると、条件一致の幅が非常に広がります。

型の判定


この辺はもう字の如くです。

is_string()

与えられた情報が、文字列かどうか調べる

is_int()

与えられた情報が、整数型かどうか調べる

is_numeric()

与えられた情報が、数値か数値形式の文字列かどうか調べる

is_array()

与えられた情報が、配列かどうか調べる

is_object()

与えられた情報が、オブジェクトかどうか調べる

とりあえず条件判断する材料があれば、なんとなく困んないんじゃないでしょうか!

※追記

ご意見への回答

今回沢山方に見ていただきました。見てくださった方からご意見を頂いたので、回答します。

>>あのさー、PHPは返却形式がTRUEとFALSEじゃないときがあるんだからそれも書こうよ。preg_matchとか返却値の値は0と1とFALSE(正規表現エラー時)だぞ。あと型判定はis_array以外まず使わないことを言わないとダメだ。

型判定にも触れて下さってるので、いらいらしながらも最後までざっとは見てくれたんですね。
本当にありがとうございます。そして折角読んでくださったのに、いらいらさせちゃってすみません。

>>preg_matchとか返却値の値は0と1とFALSE(正規表現エラー時)

ありがとうございます。文中に書いてないのでここで補足します。
preg_matchについてはコードの中でdumpしてます。
2つ目のプログラムの49行目の出力結果を見れば、preg_matchは0か1を返す事が分かると思います。
0か1をifで判定させると、0は偽となり1は真となります。
falseを返すケースがあるらしいのですが、間違った正規表現入れてもPHPがエラー出すので、falseが返るケースが分かりません!
PHPのエラーのレベルを下げると、falseが返るんですかね?

警告
この関数は論理値 FALSE を返す可能性がありますが、FALSE として評価される値を返す可能性もあります。 詳細については 論理値の セクションを参照してください。この関数の返り値を調べるには ===演算子 を 使用してください。
preg_match(PHPマニュアルより転載)

とあるので、


var_dump(preg_match($pattern,$line) === 1);

完全一致させてboolにしてしまわないとダメなんですね。

is_array以外使わないんですか?is_objectは使ったことないですけど、
is_intとかis_stringとかis_numericとか使うとき自分はあります。普通使わないんですね。

>>そろそろPHPだけじゃなくて、バージョンを明記しないと7で使うときに混乱をきたす
ここに書いた関数でPHP7で使えなくなる、または非推奨になる、または使い方が大きく変わる関数がこの中にあるんでしょうか?

>>strposのサンプルコードがまどろっこしい……。 if (false !== ($index = strpos($line, $target))) をイディオムとして覚えてしまうことをオススメします

アドバイスどうもありがとうございます。
関係無い事でちょっと調べたんですが、strposの方が文字列検索早いんですね。

ところで、
if(strpos($line,$target) !== false)がまだるっこしくて
if (false !== ($index = strpos($line, $target)))がまだるっこしくない理由が出来ればうかがいたいです。
$indexにstrposを入れるのはどうしてですか?


このエントリーをはてなブックマークに追加

コメント

"【PHP】条件分岐で困った時に使えそうな関数をピックアップしてみたよ!"
でメシのタネのおすすめを検索したよ!

プログラミング備忘録 | メシのタネ