未だに知らない初歩がある

この記事はだいぶ前に書かれたものなので情報が古いかもしれません
もう、知り合ってから四年も経つんですけどね。

四年っつったら、結構な年月ですよ。ルフィたちが自分たちを鍛え上げてもう一度集まるまでだって、二年でしたからね。単純計算でその倍ですよ。一度バラバラになって修行してシャボンディ諸島に集まって、もう一度バラバラになって修行することができますからね、四年あれば。

でも、四年経っても、未だに知らないことはあるんですね。

まあ、決して短くないとはいえ、四年ぽっちでキミの全てを知ることができるとは思ってないけどね。まだまだ知らないことの方が多いと思うけどね。



ということで、僕はもう、プログラマになって四年ほど経つんですが、今さらながらに知った、PHPのたぶん初歩的な部分について二つほど。

わざわざ書くようなことでもないんでしょうけどね。俺は知らなかったどーってのをあえて声高に宣言することでみんなが僕に対して「エンジニア力たったの5か……ゴミめ」って再認識してもらおうという、今日はそんな日です。

ああ、ちなみにエンジニア力の「力」はカタカナじゃなくて漢字の「ちから」ね。だから読み方は「エンジニアりょく」ね。



for文の条件式

for文には変数が一つしか使えない。

そう思っていた時期が僕にもありました。

for($i = 1; $i <= 10; $i++){
  echo $i.'<br />';
}

こんな感じでね。これは基本的な書き方ですよね。

で、まあ、変数が一つしか使えないって言い方は正確ではないんですけど、ようは上のコードでいう「$i」に該当するような変数を複数用意することはできない……みたいな言い方になるのかな。for文ってのはそんなものだと思ってました。

例えばこんなの。

for($i = 1, $j = 1; $i <= 10; $i++, $j++) {
  echo ($i + $j).'<br />';
}

こういう書き方はできないと思ってたんですけど、別にそんなことないんですね。

今までの僕は、こういう場面では二重ループしてたよ。



乱数固定

FFなどのRPGでやりこみプレイをするときに、乱数を固定して戦闘の結果などを毎回同じにするみたいなのがあったと思うんですが、PHPでも乱数を固定することができたんですね。

PHPには乱数を出力する「rand()」っていう関数があります。

echo rand(1,10);

こうすると、1〜10のうち、ランダムな数字が出力されます。

ランダムなんで、リロードするたびに違う数字が出力されるわけなんですが、これを毎回同じにすることが可能なんですわ。

srand("任意の数字");
echo rand(1,10);

「srand()」っていう関数は乱数ジェネレータとかいうのを初期化する関数らしくて、ここで任意の数字、何でも良いんですけど適当な数字を入れることで、乱数が固定されるみたいです。

srand(1);
echo rand(1,10);

例えばこうすると、毎回同じ結果が返されます。僕がやったら「9」って数字が返って来た。何回リロードしても9が返って来た。F5を連打しても一切画面に変化が見られなかった。

配列のシャッフルなんかも、固定することができるみたいですね。

$array = array(1,2,3,4,5,6,7,8,9,10);
srand(1);
shuffle($a);
print_r($a);

「shuffle()」ってのは配列の順番をシャッフルする関数ですが、これもsrandで任意の数字をセットすることで、毎回同じ順番にシャッフルすることができるんですね。

どーゆーときに使うん? って聞かれるとあれだけど、まあ、長いことプログラマやってりゃ、使うこともあるんでねーの?






最近、うちの極めて優秀なデザイナーが、プログラムも覚えてみたいってんで、PHPを触らせてるんですがね。その子が作ったプログラムでどうしても解決できないバグが出たっていうから、コードを見てみたんですわ。

そしたら上の2つを使っていましてね。ぶっちゃけfor文の方なんて、こんな書き方知らなかったから、「何ぞこれ? こんな書き方してるからバグ出てんじゃねーの? 何考えてんだお前。こんなコード書くなんてクビだクビぃ!」とか偉そうに言ったら実は僕の方が間違っていましたと、そんなオチでした。

まあ、僕はfor文自体使うことが少ない気がするんですけど、これは知っておけばいざってときに使えるなーと、そう思いました。
 もしかしたら何か関連しているかも? 
 質問や感想などお気軽にコメントしてください