配列となっているインデックスには、数字だけでなく、文字列を割り当てることもできます。
<?php
$animal[ "dog" ] = "犬";
$animal[ "cat" ] = "猫";
$animal[ "horse" ] = "馬";
echo "$animal[ cat ]<br />¥n";
echo "$animal[ dog ]<br />¥n";
?>
猫 犬
前述のスクリプトは連想配列と呼ばれるもので、各動物の英語表記と日本語表記が対応しています。
対応している、一番目の値の英語表記がインデックスに割り当てられます。スクリプトでは一番目には「犬」を記述していますが、echoではじめに[cat]を記述してるので、「猫」が表示されます。「馬」はechoしていませんので、表示はされません。また、犬なのでかならず["dog"]としなければいけないわけではありません。["pig"]としても=(イコール)の右辺が"犬"であり、echoに「$animal[ pig ]」とすれば、犬が表示されます。ただ、連想しやすい記述をしたほうが望ましいでしょう。
以上のスクリプトのように["dog"] = "犬"と関連付けることから、連想配列と呼ばれます。
連想配列は、インデックスに文字列を割り当てているために、通常の配列のようにループの回数を使用して配列の値を出力することができません。ですが、list関数やeach関数を使用することによって、同じように出力させることができます。
<?php
$animal = array( "dog" => "犬", "cat" => "猫", "hose" => "馬" );
while( list( $key, $val ) = each( $animal ) ) {
echo ( "インデックスの $key は、$val です<br />¥n" );
}
?>
インデックスの dog は、犬 です インデックスの cat は、猫 です インデックスの hose は、馬 です
前述のスクリプトではeach関数によって、連想配列の$animalの値をキーと値のペアで返し、list関数は複数の変数への代入を行うことができ、ここでは変数$keyと$valに出力する値を割り当てています。また、通常each()はその特性によりlist()と共に使用されます。
「while」は、繰り返しの処理をさせるために使用しています。もし、ここで「while」ではなく「if」を使用したのなら実行の結果は、「インデックスの dog は、犬 です」のみが表示されます。
連想配列では以下の関数を使用することにより、インデックスと値の関係を保持したまま、並びを変更することができます。
| asort() | 連想配列を昇順に並び替える。 |
|---|---|
| arsort() | 連想配列を降順に並び替える。 |
| ksort() | 連想配列のインデックスの昇順に並び替える。 |
| krsort() | 連想配列のインデックスの降順に並び替える。 |
<?php
$animal = array( "dog" => "犬", "cat" => "猫", "hose" => "馬" );
arsort( $animal );
while( list( $key, $val ) = each( $animal ) ) {
echo( "インデックスの $key は、$val です<br />¥n" );
}
?>
インデックスの hose は、馬 です インデックスの cat は、猫 です インデックスの dog は、犬 です
前述のスクリプトでは、arsort()によって降順に出力されていることがわかります。