メシのタネ

Webプログラミング 備忘録

  • DOMをPHPで操作できたらいいよね

    そうだよね。そう思うよね。JavaScriptでやると、画面がガタついたりするもんね。そうならないようにする方法もあるかもしれないけど、僕はできませんので、サーバー側でなんとかできたらええなぁと思って挑戦したけど、できませんでしたよ。PHP標準でHTMLをDOMにできるらしい今、技[...]

    続きを読む
  • 設計書ってなんで書くの?

    設計書をなぜ書くのかから始めてかれこれ3年近くこの禅問答をやっているわけですが、いまだに答えは出ません。ただ、その禅問答をやる中で設計書に対する取り組み方は大きく変わったので、その一部でも書いていきたい。基本設計はとにもかくにも必要だと思う設計書はいらぬ!という話をよく聞くし、自分[...]

    続きを読む
  • 書ききってやる。

    久々に書いてみる。久々に文章を書くということをやってみようと思う。伝える作業を観察したいと思ったからそうしたいと考えた。情緒的な文章は基本的にゴミ箱にぽいしてきましたが、情緒的なのも自分だと思う。「文章をかくという作業は、とりもなおさず自分と自分をとりまく事物との距離を確認すること[...]

    続きを読む
  • 普通の会社で2年普通に働いて思う事

    えらい寒くなりました。文句言いながらも現職を続けて2017年12月1日にめでたく2年がたちました。分かりやすいが乱暴に言えばITドカタと呼ばれる業界に入って案件のヒエラルキーの無慈悲さを痛感しながらも、それでもしょうがないと頑張る人たちに心を打たれながら「じゃあ俺も」と頑張れない自分に挫折して、とあ[...]

    続きを読む
  • jQueryUiのDatepicker利用時にminDate設定するとバグる件

    題名の通りなんですが、DatepickerでminDate使うとバグります。また後でキャプチャ見て貰いますけど、灰色の部分が、minDateで設定した日付が反復して出るようになるんですね。こういうの気が付かない人がいるかも知れませんが、ChoromeでminDate設定してる人は気にしてみてくだ[...]

    続きを読む

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

PHP_Logo
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を入れるのはどうしてですか?

関連記事

  1. 2012.08.03

    compact関数
  2. PHPサムネイル

コメントをお待ちしております