配列のしくみ
配列とは、仕切りのある入れ物と考えてください。仕切りで区切られたスペース(要素)のそれぞれには、数値または任意の文字列で名前をつけることができます。
数値で識別される配列のことを「通常配列」、文字列で識別される配列を「連想配列」といいます。
通常配列
[0]:山田 [1]:佐藤 [2]:鈴木
通常配列では数字でキーを決めます。つまり、$data[2]→鈴木 と表示されます。
array.php(通常配列)
<?php
$data=array(0=>'山田',1=>'佐藤',2=>'鈴木');
print($data[1]);
?>
array命令では配列に格納したい要素をカンマで区切り記述していきます。キーが省略された場合には、その時点でのキーの最大整数+1が割り当てられます。つまり何も表示しないデフォルトの状態でしたら、0,1,2,3という順に数字が割り振られます。
上記の例文でも数字を省略し、array('山田','佐藤','鈴木')というように表示も可能です。
array2.php
<?php
$data=array('山田','佐藤','鈴木');
print($data[1]);
?>
また、array命令を入れ子(ネスト)構造で記述して、多次元の配列を表現することも可能です。
array3.php
<?php
$data=array(
array('山田','男'),
array('鈴木','女'),
array('佐藤','男')
);
print($data[2][0]);
?>
この例では、以下のような表が生成されたことになります。
print命令では、[2][0]を表示ですから、「佐藤」がプリントされます。
ブラケット構文
ブラケット( [ ] )構文を利用すると、配列の要素に値をセットすることができます。
array4.php
<?php
$data=array('山田','佐藤','鈴木');
$data[0]='渡辺'; ←0番目の要素を書き換え
$data[]='山口'; ←[]に指定が無いため、鈴木の後に付け加え。
print($data[3]);
?>
ブラケット内のキー名を省略している場合は、array命令の場合と同様に、その時点でのキーの最大値+1となります。
まず、山田を渡辺に切り替えて、鈴木の後に山口が入るため、構造としては、渡辺,佐藤,鈴木,山口の順となり、プリント命令は3なので、山口が表示されます。
このようにして、ブラケットによる追加や入れ替えなどがあると、構造的に生成される配列の内容が分かりにくくなります。このようなときに、「print_r」命令を実行することで視覚的に出力することができます。
array5.php <?php
$data=array('山田','佐藤','鈴木');
$data[0]='渡辺';
$data[]='山口';
print_r($data);
?>
このprint_r命令を利用することでデバック時など変数の内容を確認したい場合などに便利です。なお、ブラウザでは改行などが取り除かれた状態で表示されますので、ブラウザのソースの表示で表示するようにするときれいに改行された形で表示されます。
連想配列
[yamada]:山田 [satou]:佐藤 [suzuki]:鈴木
連想配列では指定した文字列でキーを表示します。つまり、$data['yamada']→山田と表示されます
assoc.php(連想配列)
<?php
$data=array(yamada=>'山田',satou=>'佐藤',suzuki=>'鈴木');
print($data[suzuki]);
?>
キーとなるものが文字列に変わるだけで、他の点は「通常配列」と同様です。
可変変数
可変変数とは、「変数名を変数で決める」ということができる変数のことを言います。可変変数では、先頭に「$」を二つ重ねて変数名を別の変数値で動的に決定します。
kahen.php
<?php
$a='title';
$title='PHPを勉強しよう';
print($$a);
?>
この例の場合、変数である「$a」に対して「title」という値がセットされています。ですから、$$aには、$aの内容が評価された結果$titleと同じ意味になります。
このように、可変変数を活用することである演算の結果に応じて動的に変数の名前を付け替えることができます。
|