PHPには'shuffle'というその名の通り配列をシャッフルしてくれる関数がある。
例えば以下のようなコードがあったとしたら
<?php $numbers = range(1, 5); shuffle($numbers); print_r($numbers); ?>
こんな感じでシャッフルされる
Array ( [0] => 2 [1] => 4 [2] => 5 [3] => 3 [4] => 1 )
たまにこういった処理が必要になるが他の言語ではどうすればいいか?
Rubyにはデータを出力するためのメソッドに
print puts p pp(require 'pp'が必要)
と、たくさんあるが、'p'や'pp'は主にデバッグ用のメソッドで実際のプログラムで使用するのはあまり行儀のいいことではないとされている。
どの言語でも
10 * 3
という式を評価するとたいていは
30
という数値が得られる。
単純に10という数値に3を掛けた結果だ。
この'*'という演算子はRubyやPythonでは文字列に対しても適用できる。
例えば
PHPには多次元配列をフラットにする関数は用意されていないようだ。
だが、例えばYahoo等で"array_flatten"と検索するといろんなページが引っかかってくる。
Rubyで配列をフラットにするメソッドがflattenで、PHPでは配列に対する関数の多くにarray_という接頭辞が付くのでそんな関数あるかなと思って適当に考えただけなのに。
とはいえ、すでにいたる所で"array_flatten"という名前でその目的の関数が定義されてた。
PHPのマニュアルページにもある。
プログラムを書いてるとき実験用のデータとして人物名が何人分か欲しいとする。
こういった事は結構あるだろう。
この場合一人一人それらしい名前を考えるのも意外と面倒だったりする。
ましてや数十人分欲しいとなると名前を考えるだけで一苦労だ。
こんなとき、例えば3人分の名字、3人分の名前をすべて組み合わせて9人分の架空人物名を作る事が出来る。
PHPには可変関数というものがあるが、これは変数に格納された文字列を関数名として展開してくれる機能だ。
これを使用すれば、後から文字列を使って関数を呼び出せる事になる。
例えば
PerlやPHPでは文字列を連結する時と数値を足す時では演算子が違うので例えば
$num1 = 10; $num2 = 20; print $num1 . $num2."\n"; print $num1 + $num2."\n";
上の例ではそれぞれ
1020 30
と出力される。
では数値と文字列に対してそれぞれの演算子を適用してみる。
いろいろなプログラム言語があるがたいていどの言語もファイルを開いて読み書きする操作(関数やメソッド)が用意されている。
openと付く関数名が多いようだ。例えばPerlの場合は
配列の内容を処理していく時だが、交互に処理内容を変えたいときがある。
例えば要素をリストタグで囲って表示するのに背景色を交互に変えたいといった時だ。
PHPではこの作業は多分頻繁に発生するだろう。
$names = array("Tatsunori", "Koji", "Greisinger", "Hisanori", "Nomaguchi");
上のような配列があったとして
<li class="foo">Tatsunori</li> <li class="bar">Koji</li> <li class="foo">Greisinger</li> <li class="bar">Hisanori</li> <li class="foo">Nomaguchi</li>
こんな出力を得たいといった時だ。
これを実現するのはそれほど難しくない。
2年ほど前だがWebページの制作をしている時cssファイルを動的に書き出せないものかと考えた事があった。
書き出すというよりはcssファイル自体をPHPファイルとして記述してHTMLのヘッダ部分で
リスト(配列等)の内容を元に別の内容に変換したリストが欲しい時map関数(メソッド)が使える。
まずは簡単なサンプルを