【PHP】配列とソート(並べ替え)方法について
◇はじめに
本記事では、PHPの「配列」と「配列のソート(並べ替え)方法」について解説していきます。本記事が少しでも参考になれば幸いです。
◇「配列」とは?
配列とは、複数の文字列や数値のような値を格納できるもののことを言います。
単純な変数であればひとつの値しか格納することができませんが、配列を利用することで複数の値をまとめて取り扱うことができるので大変便利な機能となります。配列のイメージとしては、値の入った箱が横一列に値の数分連なっているイメージでしょう。
◇配列の書き方
//配列の書式は以下の通りです。
$配列名 = array(値1.値2,…);
//使用例↓
$animal = array('dog','cat','mouse','monkey');
上の"dog"や"cat"のようなひとつひとつは配列の「要素」と呼ばれます。配列が定義されれば、左に記述された要素から順番に0からはじまる「インデックス」番号が付与されます。学校で言う出席番号のようなものです。ここでは「1」からではなく「0」から番号が付けられるという事が注意点です。
◇配列の要素の取得方法
//要素の取得は以下の通りです。
$配列名[インデックス番号];
//使用例↓
echo $animal[0];
//実行の結果、ブラウザに「dog」と表示される
◇「連想配列」とは
連想配列とは、配列でのインデックス番号の代わりに、それぞれ名前(キー)を指定することができる配列の事を言います。
◇連想配列の書き方
//連想配列の書式は以下の通りです。
$animal = array('キー名1'=>値1,'キー名2'=>値2,…);
//使用例↓
$animal = array(
'dog'=>'犬',
'cat'=>'猫',
'mouse'=>'鼠',
'monkey'=>'猿'
);
◇連想配列の要素の取得方法
//要素の取得は以下の通りです。
$連想配列名['キー名'];
//使用例↓
echo $animal['cat'];
//実行の結果、ブラウザに「猫」と表示される
◇配列(連想配列含む)のソートについて
「ソート」とは、ある特定のルールに従ってデータを並べる事を言います。以降からはその種類や方法について解説していきます。
◇代表的なソート関数
配列をソートしてくれる関数は多数存在し、どれも似たような名前であるため少しこんがらがってしまうかもしれません。そうならない為に、ソート関数名の法則を先に記述ておきます。
関数名は「sort」という名前を基準として、特徴毎のアルファベットを頭にくっ付けたようになっています。以下をご覧ください。
■昇順・・・何もつかない 【例:sort()】
■降順・・・「r」が付く 【例:rsort()】
■キー名/インデックス番号の並べ替え・・・「k」が付く 【例:ksort()/krsort()】
■値の並べ替え・・・「a」 【例:【例:asort()/arsort()】】
◇ソート関数の使用例
それでは、それぞれの詳細と使用例を見ていきましょう。まずは上記で挙げたソート関数を【キーと値との相関関係を維持するか否か 】で二つの区分に分けご紹介していきます。
◆相関関係を維持しない
ソート後は元のキーが残らず、新たにキーを(0.1.2.…)と振りなおされる
⇒【sort()】【rsort()】
■sort()・・・値の昇順、キーとの関係維持しない
//連想配列を作成
$test = array(
'key1'=>'A',
'key2'=>'B',
'key3'=>'C',
'key4'=>'D'
);
//並べ替え
sort($test);
//配列の情報を出力
print_r($test);
⇒結果:【Array ( [0] => A [1] => B [2] => C [3] => D )】
元のキーは無くなり、新しく「0」からの番号が振られていることがわかります。
■rsort()・・・値の降順、キーとの関係維持しない
//連想配列を作成
$test = array(
'key1'=>'A',
'key2'=>'B',
'key3'=>'C',
'key4'=>'D'
);
//並べ替え
rsort($test);
//配列の情報を出力
print_r($test);
⇒結果:【Array ( [0] => D [1] => C [2] => B [3] => A )】
◆相関関係を維持する
ソート後も元のキーと値の関係が維持され、共に並び変えられている
⇒【asort()】【arsort()】【ksort()】【krsort()】
■asort()・・・値の昇順、キーとの関係維持する
//連想配列を作成
$test = array(
'key1'=>'A',
'key2'=>'B',
'key3'=>'C',
'key4'=>'D'
);
//並べ替え
asort($test);
//配列の情報を出力
print_r($test);
⇒結果:【Array ( [key1] => A [key2] => B [key3] => C [key4] => D )】
sort()とは違い、値の並び替えに伴い元のキーも共に反映されていることが分かります。
■arsort()・・・値の降順、キーとの関係維持する
$test = array(
'key1'=>'A',
'key2'=>'B',
'key3'=>'C',
'key4'=>'D'
);
//並べ替え
arsort($test);
//配列の情報を出力
print_r($test);
⇒結果:【Array ( [key4] => D [key3] => C [key2] => B [key1] => A )】
■ksort()・・・キーの昇順、値との関係維持する
//連想配列を作成
$test = array(
'key1'=>'A',
'key2'=>'B',
'key3'=>'C',
'key4'=>'D'
);
//並べ替え
ksort($test);
//配列の情報を出力
print_r($test);
⇒結果:【Array ( [key1] => A [key2] => B [key3] => C [key4] => D )】
■krsort()・・・キーの降順、値との関係維持する
//連想配列を作成
$test = array(
'key1'=>'A',
'key2'=>'B',
'key3'=>'C',
'key4'=>'D'
);
//並べ替え
ksort($test);
//配列の情報を出力
print_r($test);
⇒結果:【Array ( [key4] => D [key3] => C [key2] => B [key1] => A )】
これらソートをおこなった配列は新しくソート版が作成されるものではなく、元の配列が書き換えられているので注意してください。
◆その他のソート方法
それでは最後に、もうひとつ別のソートも見ていきましょう。
■natsort()・・・値の自然順、値との関係維持する
自然順とは、より人間に近い並べ方をしてくれるという事です。実際に見てみましょう。例えば下のような配列があるとします。
//連想配列を作成
$test = array(
'key1'=>'No.1',
'key2'=>'No.2',
'key3'=>'No.10',
'key4'=>'No.20'
);
これをasort()でソートすると次のような結果になってしまいます。
⇒結果:【Array ( [key1] => No.1 [key3] => No.10 [key2] => No.2 [key4] => No.20 )】
アルファベットの後に数字と続くような値に関しては、普通の値の昇順にしてしまうと、辞典のようにアルファベットはA~Z、数字は0~9と一文字一文字を判別して並べ替えられるため、No.以降の10や20の値を複数桁と捉えられないのです。
このソートを自然順のnatsort()に替えて実行してみると、結果は以下のようになります。
⇒結果:【Array ( [key1] => No.1 [key2] => No.2 [key3] => No.10 [key4] => No.20 )】
他にも、通常のソートでは期待と違う結果になるケースがあるため、状況に合わせてnatsort()を活用してみてください。
◇おわりに
いかがでしたでしょうか。
配列はPHPのプログラミングにおいても非常に便利で欠かせない機能です。是非本記事を参考にしていただき、配列の扱いの参考にしていただければ幸いです。最後まで読んでいただきありがとうございました。