このサイトはPHPを独習する際に作成したスクリプトを基に、プログラム言語初心者のための入門講座として作成しました。PHPは初心者に親しみやすく、解りやすいプログラム言語です。これからプログラムを学ぶ人の参考になればと思います。
ネズミ講プログラム
ネズミ講というと聞こえは悪いですが、誰かが誰かを紹介していくという構成はとても複雑な仕組みができますね。それを表にするのは大変な労力です。これをプログラミングするのが今回の目的です。 構成表も無限に枝分かれしていくため、ループを作っていくところまではすぐにわかるのですが、いざ作り始めて、とんでもなくややこしいことに気がつきました。
構成表を作る
 元締めの下に4人いてそれぞれ、下に人が配置されるのですが、これらの誰かを選んで名前を入れるとその人の下に表示されていく仕組みです。縦にデータが増えるのは単純にループをすればいいのですが、この場合は横にも増えて行きます。 その回数つまりダウンですね、これも無限でなければならないのです。10までなどと指定があれば、ループを回数分重ねればいいのですが、これでは意味がありません。またどの人のダウンにも付くことができるようにしなければなりません。 そこで、会員1人を1ファイルとして、自分の名前と紹介者の名前を書き込むようにしました。ファイルを順に読んで、紹介者が元締めなら左端に並べます。この場合はまず、アトムですね。アトムが記述されると同時に、アトムの下に来る人がいないかを調べます。コバルトとウランです。しかし、コバルトがでた時点で、さらにコバルトの下がいないかを調べて記述するのです。 この時点でもう迷宮入りって感じですね。これを解決するのが再帰関数でした。
再帰関数
再帰関数は、ユーザー定義関数の中でその関数自体を呼び出すという、とんでもない仕組みです。関数内部の作業中にもう一度同じ関数を呼び出すのですから、呼びだした関数の中にもまた、同じ関数を呼び出す部分が出てくるわけです。頭の中がループしてきますね。 この再帰関数は意外と良く使われているようです。ゲームの思考回路などに使われるようなのですが、私の頭もまだループの中なのでうまく説明できません。
function ROOP() echo "ROOP"; ROOP(); }
このようにROOPという関数の中でROOPの関数を呼び出すのですから、完全な無限ループです。もちろん無限ループはまずいですからなんとかしなければなりません。このネズミシステムではその人の下にはいない場合ループから抜ければいいわけです。 1人のデータを読むたびに、全員のファイルを読みなおし紹介者が同じかどうかを調べるわけですから、これは時間がかかります。もっといい方法があると思いますが、とりあえずは使用できます。ここでもデータの追加ができるのですが、ほっておくと大変なデータになるので自動削除の仕組みも入れました。
⇒こんな感じ |