#4825

忘却関数十選


web制作

昨日分の記事にPHP+JavaScriptでエラーにハマった話を書きましたが、
何度も検索している関数は他にもあるだろうということで
+Google」でwebブラウザ履歴内を表示回数順に検索して、
自分が忘れやすい(または使う頻度の多い)関数を浮かび上がらせてみました。

・if, else, elseif, for, while, foreach文

(条件分岐とループ)
if, else, elseifはカッコ内の条件によって一度だけ実行したりしなかったりする条件分岐。
for, while, foreachはカッコ内の条件を満たすかぎり何度も実行するループ文。
自分の場合はforはほぼ使わず、foreach=配列ひとつずつに何らかの処理をしたい場合、
while=それ以外の場合、という風な単純な使い分けで落ち着いています。
この辺の基本構文はPHPをいじりはじめて間もない頃は使うたびにマニュアルを読み返していました。

・array_slice, array_merge, array_push関数

(配列操作)
array_sliceは任意の配列から連続する要素を取り出した新しい配列を作る関数。
array_mergeは配列同士をくっつける関数。
array_pushは配列の一番後ろに任意の値をくっつける関数。
array_pushの場合、キーが連番なら$array[] = “くっつけたい値” の方が手っ取り早そうです。
配列操作はループ文のゴリ押しでもなんとかなってしまうことも多く、
自分はあんまりこれらにはお世話になっていませんが
こういう関数をスマートに使いこなしていければもっと行数を抑えることができるんでしょうかね。

・time, date, DateTime, strtotime関数

(時間操作)
time()は現在日時をUNIX TIME(1970年1月1日0時0分からの経過秒数)で取得する関数。
dateは引数に指定されたUNIX TIMEを「1970/01/01 00:00」のように指定書式に変換する関数。
strtotimedateの逆で、指定された日付フォーマットを解釈してUNIX TIMEに変換する関数。
DateTimeはほぼ使っていないので理解がまだ浅いのですが、
ざっくり言えばPHP5.2で追加されたtime()の拡張版で、2038年問題にも対応したもの。
new DateTime()で今日の日付を返します。本当はこれを使わないといけないんでしょうね……。
PHPの日付書式をまだ覚え切れていないせいでdate関数は本当に頻繁に検索してしまいます。

・%

(代数演算子:剰余)
意外と忘れがちなのが代数演算子にさりげなくある「%」。割り算の余りを返します。
Excelで言うところのmod関数ですね。
例えば「11 % 2」のとき、「1」を返します。
これも、あまり使わないけれど使おうとするたびに検索してしまう機能のひとつ。

・mysqli_num_rows関数

(MySQLクエリの結果行数を取得)
これはどちらかというと機能というより関数名を覚えきれなくて検索してしまう類。
例えばmysqli_countみたいにシンプルな関数名にしたらいいのに……。
mysqli_num_rows(MySQLクエリの結果を格納した変数) でデータの行数を取得します。
同じデータベース関数のmysqli_query関数やmysqli_fetch_assoc関数も頻繁に使っていますが、
割とコピペで済ませてしまって応用的な使い方はそういえば全然してないですね……。

・strstr, strpos, substr, mb_substr関数

(文字列操作)
同じような名前のおかげで毎回どれがどれなのか混乱してしまう関数群。
strstrはある文字列のうち、指定文字列が最初に現れた場所以降を切り出す関数。
strposはある文字列のうち、指定文字列が最初に現れる場所が何文字目かを返す関数。
substrはある文字列のうち、指定位置から指定範囲までの文字列を切り出す関数。
mb_が付いている関数はそれぞれのマルチバイト対応版です。
ちなみに先頭にstrが付く関数は他にもまだまだあったりします。こんなの覚えきれない。
とはいえ頻繁に使うのは上の3つ+マルチバイト対応版くらいでしょうかね。

・ceil, floor, round関数

(浮動小数点数処理)
小数点をごにょごにょする関数群。
ceil関数は切り上げ。厳密には「次に大きい整数」なので「ceil(-1.1)」は「-1」となります。
floor関数は切り捨て。こちらも負の数の場合の挙動に注意が必要です。
round関数は四捨五入。指定桁数で数値を丸めます。
大抵round関数でなんとかなるのですが、切り捨て・切り上げをしたくなったときに
「どっちがどっちだっけ?」となってしまい悔しい思いをする関数です。いい加減覚えよう。

・preg_match, preg_replace関数

(正規表現)
より複雑なパターン文字列検索を行いたいときに使う関数「正規表現」。
preg_matchはマッチした文字列があるかどうかのみを検査する関数で、
preg_replace関数はマッチした文字列を指定文字列に置き換えます。
正規表現は文字列検索系関数を凝縮したパズルのようなもので、
なんとなく心惹かれるものもありますがとても一朝一夕で覚えられるものではありません。
正規表現の部分だけで解説書がごまんとあるくらいだし。

しかもPHPとJavaScriptでパターンのルールが違うらしいんですよね。
(参照1:PCRE正規表現構文 – PHP Manual)
(参照2:JavaScript正規表現 – Mozilla Developer Network
webデザインが本職な方達はこれをどうやって切り分けて覚えているんだろう……。
意外と共通部分が多かったりするんだろうか?
自分は現段階では使用頻度はさほどでもないのでもう割り切って使うたびに調べていますが、
いずれ高頻度で使うようになったらさすがに毎回調べるわけにもいかなさそう。

・sprintf関数

(数値を指定フォーマットに変換)
数値を例えば先頭ゼロ詰め(=ゼロパディング)したいときに使う関数。
これも正規表現よろしく独特なフォーマットがあって覚えづらい関数の一種です。
ゼロ詰めで桁数を揃えたい場合はフォーマットに”%0nd”(nは桁数)を指定します。
%はデリミタのような指定接頭辞、0が埋める文字列、nが桁数、dが10進数という意味だそうです。
ゼロ詰め以外にも様々な応用ができる関数みたいですが、
とりあえず自分的には今のところゼロ詰め=sprintf関数みたいなイメージ。

・implode, explode関数

(文字列連結・分割)
implodeは配列を指定された区切り文字でくっつけてひとつの文字列にしてしまう関数。
explode関数は文字列を指定された区切り文字で分割して配列変数にしてしまう関数。
MySQLとデータをやり取りするときにまれに使います。
csvの入出力をするようになったらもっと高頻度で使うことになりそう。

*  *  *

だらだら書いていたら100行くらいになってしまいましたが。
こうしてざっと眺めてみると意外とピクチャレ大会程度のレベルなら
同じような関数の使い回しでアップデートしていけるっぽいような気もしますね。
そういえば最近は新しい関数を知る機会というのも少しずつ減ってきたような。
それを危機的状況と心得るか、既知の関数で現行の運営は必要十分と考えるか。
まぁでも、もっとプログラミングが楽になる関数があるかもしれないので、
それがあるかどうかを調べるくらいはいずれやってみたいとは思いますけどね。
上に書いた剰余の演算子も、最初に発見したときは「こんな簡単な方法があったのか」
と驚いたものでした。webプログラミングの世界は広くて深い……。

コメントを残す