第3回 占いソフトを作ろう - rand()関数、配列、連想配列 - - PHP基礎講座

PHP 中級 講座

Saity先生のPHP基礎講座

Lecutures on PHP

第3回 占いソフトを作ろう - rand()関数、配列、連想配列 - (その2)

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

「ランダム」に結果を表示させるには?

  • よし、じゃあ早速プログラムの作成に入ろうか。まず、自分でできるとこまで書いてみよう。
  • どれどれ、復習がてら書いてみるかぁ。。。とりあえず、ざっと思いついた感じで書いてみますね!
<?php
if (なんちゃら・・・)
・・・
print("今日のあなたは、3時頃にPHPと唱えると良いことが起こるでしょう");
print(
"今日のあなたは、PHPの方角(たぶん東)がラッキー方角です");
print(
"今日のあなたは、print関数を紙に書いてお守りにしましょう");
  • うーん、書けない。。。printを使って占いの結果を出せばいいことは分かるんだけどな。
  • (とんでもない占いだなぁ・・・)ふむふむ、どこでつまったの?
  • えっと、if文をどう使ったらいいのか・・・どうやって占い結果をランダムに選び出すのか・・・とか。
  • なるほどね。if文を使えば書けるかも、って所まではわかっているんだけど、ランダムに出す方法がわからないのか☆ そういうときは、適切な関数を探すのが一番!PHPの場合、あればいいなって思う関数はだいたい用意されてるんだ。探すにはPHPマニュアルを調べるのが一番だよ。
  • どうやって調べればいいんですか?
  • じゃあ、必要な関数の見つけ方を説明しよう。このPHPプロ!の上にある検索ボックスで、実現したい機能名を検索してみてごらん。 もしくは「http://phppro.jp/検索ワード」でも大抵は大丈夫。今回は、ランダム機能が欲しいんだから、ランダムって入力したらいいよ。
  • わぁ、いっぱい出てきた。どれを使うのが正しいのかな。
  • PHPの関数については、何となく英語名からその機能を判断することができるよ。今回の場合、「ランダム」だから、「random」という英文字の一部を含むものを探してみよう。 正解は、rand関数を使うんだ。この関数の説明を見てみると「乱数を生成します」と書いてある。 こんな風に自分が使いたい関数を検索したときに、何となく英語名から判断できるのが一番望ましいけど、そのうちよく使う関数は覚えるようになるよ。
  • えーっと、今回の場合、たとえば10個の占い結果を用意したら、そのどれかが表示されるようにすればいいんですよね。
  • そうそう!マニュアルにある使用例を真似して1から10の数をランダムに生成しよう。
  • うーん・・・こんな感じかな?
<?php
echo rand(1,10);
?>
  • OK☆。簡単に関数の説明をしておくと、rand(1,10)というのは、1から10までの整数の中からランダムに一つの値を選んで返してれくるんだ。
  • えと・・自分で書いておいて、よくわからない。。。1と10の間のカンマは何なんですか?
  • そうか、その説明が抜けていたね。前回、関数と引数の説明をしたけれど、実は関数の引数は1つとは限らないんだ。関数によっては、2つ、3つと引数を取れるものもあるんだよ。そのような場合に、2つめ、3つめの引数を区別するのに、rand(1,10)のようにカンマを使うのさ。 ここでは、1が1つ目の引数、カンマで区切って、10が2つ目の引数って事。
  • ふむふむ?。rand関数の使い方はわかりました?。でも、どうやってifと組み合わせればいいんだろ。わからないことばっかりだぁ・・・。
  • そうかぁ。じゃ、僕が正解のプログラムを書いてみようか☆
  • お願いしまーす。
<?php
$uranai_bangou 
rand(1,10);
if (
$uranai_bangou == 1) {
  print (
"今日は運気が上昇しそうです!");
} elseif (
$uranai_bangou == 2) {
  print (
"#好きな文章その2・・・");
} elseif (
$uranai_bangou == 3) {
  print (
"#好きな文章その3・・・");
} elseif (
$uranai_bangou == 4) {
  print (
"#好きな文章その4・・・");
} elseif (
$uranai_bangou == 5) {
  print (
"#好きな文章その5・・・");
} elseif (
$uranai_bangou == 6) {
  print (
"#好きな文章その6・・・");
} elseif (
$uranai_bangou == 7) {
  print (
"#好きな文章その7・・・");
} elseif (
$uranai_bangou == 8) {
  print (
"#好きな文章その8・・・");
} elseif (
$uranai_bangou == 9) {
  print (
"#好きな文章その9・・・");
} else {
  print (
"#好きな文章その10・・・");
}
?>
  • ここで「 == 」はその左右の値が等しいかどうかの比較をしてるんだ。つまり、最初のif文の()の中は「$uranai_bangouの中の値が10と等しいかどうか」という意味さ。他も同様だよ。
  • なるほど?、rand関数の結果を$uranai_bangou変数に代入して、それをif文で10回分岐すれば、1から10で占い文を出せるのかぁ。
  • そうだね。なんとなく理解できた?
  • はーい、変数に入れてifで分岐。その条件にrand関数を使うって、なかなか高等テクニックですね?。これで私もステップアップかな?!
  • だね!でもね、今回のこのコードは全く新しいことを組み込んでないんだ。
  • 変数・関数・if文だけって意味ではそうですね。
  • 本当は「配列」を教えたくてこの題材にしたんだよ。このコードってちょっと慣れた人から見ると美しくなくて、配列を使うともっと効率的に記述する事が出来るんだ。 点数にしたら10点ぐらいの出来かなぁ。
  • 配列?そんなの知らなくても書けたじゃないですか。
  • そうなんだけど、もしこれを100個、200個と占い文を作っていこうとしたら、かなり大変だよね。だから、できるだけ効率のよい方法を使ったほうがいいんだ。それでは、配列について学んでいこう。
  • (自分で作っておいて10点はないよなぁ・・・)

  



Pick Up Q&A

Q
動的なURLを静的に見せる方法
 このエントリーをはてなブックマークに追加 
A
普通に考えて、mod_rewrite でしょうね。 http://www.nishishi.com/blog/2006/01/mod_rewrite_url.html...

>>続きを読む

GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)