このサイトはPHPを独習する際に作成したスクリプトを基に、プログラム言語初心者のための入門講座として作成しました。PHPは初心者に親しみやすく、解りやすいプログラム言語です。これからプログラムを学ぶ人の参考になればと思います。
配列の並べ替え
ここでは配列のコントロールをいろいろとやってみましょう。 配列の中に入れられたデータはその順番をさまざまな方法で、並べ替えることができるのです。 例えば得点の多い順に並べるとか、新しい順に並べるとか、掲示板なんかを想定してもいろいろと使えそうな機能です。 配列には「キー」と呼ばれるものが付属します。通常は0から始まる番号なのですが、この「キー」が重要な役割を持つので注意してみていってください。
12-1 バラバラにしてまた戻せ!
ループのところで shuffle を使うと簡単にまぜこぜにできる、と言うのをやりましたが、今度はこれを元の順番に戻します。shuffle と同じように簡単に記述ができます。
sort(配列) ;
とっても簡単ですね。たとえばこうすれば、一度シャッフルしてもとに戻せます。 ここで新しく print_r という関数が登場します。この関数を使うと配列の中味を順に表示してくれるのです。これはスクリプトとしての完成品には必要ないものなのですが、スクリプト作成中には非常に役に立つ関数です。
$fruits = array("みかん","ぶどう","りんご","いちご"); shuffle ($fruits); //配列をシャッフルします print_r ($fruits) ; //配列を表示 sort ($fruits); //配列をソートします print_r $fruite ; //配列を表示
このスクリプトを実行すると次のように表示されます。 [0] => みかん これが1セット、1番はみかんですよという意味なんですね。 で、これを実行すると、先ずランダムに2行目は順番にならんでいます。
Array ( [0] => みかん [1] => りんご [2] => いちご [3] => ぶどう ) Array ( [0] => いちご [1] => ぶどう [2] => みかん [3] => りんご )
並んでないし・・・、実は array で並べた文字の順番は無視して中身の文字を順番に並べてくれるのが sort なのでした。ソートには ksort asort などがあり、[ ]の番号順に並べる方法もあるのですがとりあえず今回は sort だけにしましょう。
その代わりでもないのですが、range という関数が登場します。サンプルで作ったファイルは9枚の画像を並べるのですが img01.jpg なんて名前です。9枚が番号順になっているので、これをバラバラにしたり順に戻したりします。この場合1から9までの数字を配列に入れていく記述は面倒です。
そこでこれを自動化、range は初めと終わりを記述するだけで、配列に格納してくれます。
$car = range(1,3); //$car = array(1,2,3)と同じ
さらに乱数を発生させる関数 rand() もでてきます。これも使い方が簡単。
$rand = rand(1,5); //1,2,3,4,5 のどれかが代入されます。
この乱数とボタンの数値が合えば絵が完成する仕組みです。
⇒こんな感じ
12-2 いろんなソートを試してみよう
ソートはいくつかの種類があるのです。それを試してみましょう。変数の記述法の Array ( [0] => みかん [1] => りんご [2] => いちご [3] => ぶどう ) この[0],[1]はキー(k)、みかんやりんごを配列の要素(a)とします。そこで次の関数をみてください。
sort(配列) ; 要素を基に並べ変える。キーは無視される asort(配列) ; 要素を基に並べ変える arsort(配列) ; 要素を基に逆順で並べ変える ksort(配列) ; キーを基に並べ変える krsort(配列) ; キーを基に逆順で並べ変える natsort(配列) ; 要素を基に自然数順で並べ変える
a は要素を基に k はキーを基に順番に並べるのです。r はリバース、逆順に並べるのです。最後の natsort は数字を自然順位で並べる関数です。数字を並べる場合、桁数が異なると1,11,12,2,23,3,35 と言うように並んでしまいます。これを自然数の順に並べるのが natsort なのです。
Array ( [0] => みかん [1] => りんご [2] => いちご [3] => ぶどう ) この配列のキーは 0 から 3 になっていますが、この数字は任意のものが使えます。サンプルではキーを背の高さの数にして、配列の要素を画像ファイル名にしています。画像ファイルは img5.jpg と言うように年齢の数字をつけました。つまり、年齢や身長で画像を並べ替えようというスクリプトです。
次に表示方法です。まず配列の中にあるデータを、キーと要素のセットで取り出すにためにlist を使います。
list (キー, 要素) = each (配列)
但しこれでは1セットしか取り出せないので、while と組み合わせ順に最後まで取り出しながら表示していきます。
while (list ($key, $array) = each ($man)) { echo "<img src='man/".$array."'>"; }
これが配列のキーと要素を順に取り出す記述です。$man が配列でここから、$key $array つまりキーと要素を順に取り出して、echo で表示していきます。配列の要素の最後に来ると終了します。 この時配列の最後にポインタがきています。ポインタと言うのは、配列のなかでphpが認識している場所です。そこで、これを初めに戻してあげます。それがリセットです。これは画像の次にキーと要素を文字で表示させるためなのです。
reset (配列);
後はform で情報を送りswitch でソートを選び、表示させれば完成です。
⇒こんな感じ
パラメータを使った並べ替え
最後にサンプルでは使用していませんが、オプションとして、次のような方法があります。
sort(配列,パラメータ);
このパラメータを次の3つから選択することで並べ方をコントロールすることができます。 SORT_REGULAR - 通常通りに項目を比較 SORT_NUMERIC - 数値的に項目を比較 SORT_STRING - 文字列として項目を比較
|