いやぁ、、ずいぶん間が空いてしまいました。 すいません。。 というわけで、前回。
PHP で遊ぼう(6) – if と 変数と
では今回の例題カードならべかえの3枚版を。 $center が真ん中です。 😛
ということで、if と変数をつかって2枚のカードのならべかえをやってみました。 if は式を評価して、プログラムを分岐させる構文でした。 比較演算子と呼ばれるのが、 == とか < とか > で、これは2項演算子といい、両辺に書いた2つの変数や数字を比較できます。
2項ということで、2枚のカード(変数)の比較は簡単ですが、これを3枚にしたら、、というのが最後に書いたことでした。 なんとやってくれた方が2名も!
PHPのお勉強: ifを使って3枚並び替え@naoki さん
PHP で遊ぼう(6) – if と 変数とにて、PHPで3枚の数字を並び替えについて問題があったので、やってみました。
雑念ベース ≫ PHP による並べ替え@よしともさん
ループを使うのが普通ですが、ここはあえて使わない方向で挑んで見ました。長ったらしいコードになってしまっていますが、これはいわゆるバブルソートですね。隣同士を比較して入れ替えていくというやつです。N個の場合の比較回数は N(N-1)/2 で、3(3-1)/2 = 6/2 = 3。なので3回分の if を書いています。
3つのカードが並ぶパターンを全て if で表現されているのが、naoki さん版。 一方、よしともさん版は、入れ替えをしたときに最大何回いれかえる必要があるかという観点でかかれています。
うーん、すばらしい。。 おそらくこの問題ではこの2種類の書き方に大きく別れるのではないかと思います。 ある程度一度に同時処理できる人間の考え方に近いのが naoki さん版(人間はこの if をいっきに処理できる)で、順次だけれど高速に処理できるコンピュータの特性を生かしたのがよしともさん版です。 ぜひ、みなさんもみてみてください。 🙂
というわけで、コンピュータ言語の比較の基本は2項です。 なにかとなにかが同じなのか、違うのか。 多いのか、少ないのか。 プログラムもなるべくこの形にもっていったほうが、分かりやすいし書きやすくなります。 複数の条件を比べる場合は if を 2つつかったり、 && (アンド)や || (オア)でつなげる必要があります。
ではカードでは”数字”を比べてみましたが、他のものは比べられるのか。。 変数には数字以外にも文字列をいれることができます。 ここからがスクリプト言語の恐ろしさです。
いままでのサンプルは毎回同じ答えがでるものでした。 画面からの入力とかをやっていないので、あたりまえなのですが、これじゃー面白くないってことで…。 画面からいれなくても変わるものということで、今回は”時間”をタネにしてみます。
$time = Date('H:i');
PHP の組み込み関数というのに、Date というのがあります。 とりあえず詳細はまた。 上記のようにすると $time という変数に「24時間表記で現在の時間」がたとえば、"17:01" とかという文字列が変数に格納されます。
じゃー、これを if で比較したらどうなるのか。 朝、昼、夜でためしに比較してみましょう。
- <?php
- $time = Date('H:i');
-
- if($time >= "05:00" && $time <"10:00") {
- echo "朝だよ";
- }
- else if ($time >= "10:00" && $time <"18:00") {
- echo "昼だよ";
- }
- else {
- echo "夜だよ";
- }
- ?>
なんと恐ろしいことにうまく比較できてしまいました。
まず、&& はアンドを表す演算子で、その両方の条件がそろうことを意味します。範囲を指定したい場合、このような表現になります。(数学みたいに 100 < x < 200 とかできない)
今回の文字列の比較をすんなり受け入れられる方は、まったく問題ありません。 逆に、高級言語でプログラムを書かれる方には異常に見えるかもしれません。 詳しく調べていませんがPHP の場合、文字列通しの比較を行うとおそらく設定されている文字コード順で大小比較されます。 ということで、24時間制で表現された文字列の場合、上記の if でうまく比較できます。
これがスクリプト言語の「のり」ってやつですが、とりあえずそれっぽく書いてみると大抵うごきます。 どんどんやってみてください。 :-)
さてさて、正直こんなプログラム、動かしてもつまんないわけです。 でも、つかう場所によっては面白くなるかも...! というわけで、これを WordPress のプラグインにしてみましょう。 大量のデータは、プログラムに命を与えます。
ターゲットは、ブログのコメント欄。 ここって、時間だせますが、そのまんまだすと書き込んだ時間が赤裸々に。。 気になる方もいるでしょうから、これを上の if をつかって化かしてあげるプラグインにしてみます。
WordPress のプラグインの基本的な考え方は、のっとりです。 特に画面表示系ののっとりのことを、filtter hook といいますが、簡単に言えば表示する文字列を、プラグインでうばって置き換えてしまう仕掛けです。
詳しくは、
WordPress プラグイン作成時のノウハウ - 前編 -
で、今回奪い取りたいのはコメントの時間欄。 これは、get_comment_time というフィルターでうばいとれます。 奪う、には add_filter という WP 組み込み関数を使い、処理をする自分の「関数」を指定します。
- <?php
-
-
- http://wppluginsj.sourceforge.jp/wp-ohayo/
-
-
-
- http://zone.maple4ever.net/blog/
-
- function wpohayo($time) {
-
-
- global $comment;
- $time = mysql2date('H:i', $comment->comment_date);
-
-
- if($time >= "05:00" && $time <"10:00") {
- $message = "朝だよ";
- }
- else if ($time >= "10:00" && $time <"17:15") {
- $message = "昼だよ";
- }
- else {
- $message = "夜だよ";
- }
-
-
- return $message;
-
- }
-
- add_filter('get_comment_time', 'wpohayo');
- ?>
一番下の行に、add_filter がみえ、get_comment_time をうばい、wpohayo という関数を指定しているのが分かります。 で、その上にあるのが実際に処理をする wpohayo 関数で先ほどの朝、昼、夜分岐が見えます。 また、コメント時刻を取得するのに WP の変数を読んでいるのが分かります。(この辺はちょっとノウハウがいりますね。 似たような処理をしているプラグインをみるのが早道です)
最初の、プログラムでは echo で画面に表示していましたが、WP のプラグインの場合、表示はせずに表示させたい文字列を return してあげます。 こうすることで、WP がその文字を表示してくれる仕掛けになっています。
というわけで、かなり駆け足でしたが if と変数だけでつくる、WordPress プラグインでした。
簡単なプログラムもデータによっては結構楽しくなります。 というわけで次のエントリでこのプラグインの 1.00 の紹介を。 :-)