PHPでプログラミングをしているとほぼ間違いなく配列を使うことになりますが、うろ覚えだったりしていつも調べ直すのに効率が悪いのでとりあえずこれだけ知っていれば普通に困らないだろうというレベルでまとめました。
※PHPのバージョンは5.5.14(手元のMacに入っているPHPのバージョンがコレだったので)
PHPの配列
PHPではキーが数値の普通の配列(C言語の配列みたいなの)とキーが文字列である連想配列の区別がありません。キーは数値、文字列を混在させて使用することができます。(あまりやりませんが)
変数を配列として初期化する
以下のようにすることで変数$aryは配列として扱うことができます。
1 |
$ary = array(); |
配列に値をセットする
以下の場合キーは0, 1, 2と順番に振られます。
1 |
$ary = array('値1', '値2', '値3'); |
それぞれキーを指定して値をセットすることもできます。
1 |
$ary = array('キー1'=>'値1', 'キー2'=>'値2', 'キー3'=>'値3'); |
部分的にキーを指定した場合は次のようになります。
1 2 3 |
<?php $ary = array('値1', 'キー2'=>'値2', 'キー3'=>'値3', '値4'); print_r($ary); |
1 2 3 4 5 6 7 |
Array ( [0] => 値1 [キー2] => 値2 [キー3] => 値3 [1] => 値4 ) |
[]を使用して値をどんどん追加していくこともできます。この場合キーは0, 1, 2・・・と順番に振られていきます。
1 2 3 4 |
$ary[] = '値1'; $ary[] = '値2'; $ary[] = '値3'; ・・・ |
配列に直接キーを指定して追加することもできます。
1 2 3 4 5 6 7 |
$ary[0] = '値1'; $ary[1] = '値2'; $ary[2] = '値3'; $ary[] = '値4'; //キーは3が振られる $ary['キー1'] = '値1'; $ary['キー2'] = '値2'; |
既に値の入っている要素へのアクセスは配列にキーを指定してアクセスします。
1 2 |
$ary[0] = '値'; $val = $ary['キー1']; |
多次元の配列
配列の要素に配列をセットすると多次元配列として扱うことができます。
1 |
$ary = array(array('値1', '値2'), array('値3', '値4')); |
とすると$aryの中身は次のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Array ( [0] => Array ( [0] => 値1 [1] => 値2 ) [1] => Array ( [0] => 値3 [1] => 値4 ) ) |
1 |
$ary = array('キー1'=>array('値1'), 'キー2'=>array('値2', '値3'), 'キー3'=>array('key1'=>'値4', 'key2'=>'値5')); |
とした場合は
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Array ( [キー1] => Array ( [0] => 値1 ) [キー2] => Array ( [0] => 値2 [1] => 値3 ) [キー3] => Array ( [key1] => 値4 [key2] => 値5 ) ) |
となります。
配列に直接キーを指定して追加することもできます。
1 2 3 4 5 6 7 8 9 |
<?php $ary[0][0] = '値1'; $ary[0][1] = '値2'; $ary[0][2] = '値3'; $ary[0][] = '値4'; $ary[1][0] = '値5'; $ary[1][1] = '値6'; $ary[][] = '値7'; print_r($ary); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Array ( [0] => Array ( [0] => 値1 [1] => 値2 [2] => 値3 [3] => 値4 ) [1] => Array ( [0] => 値5 [1] => 値6 ) [2] => Array ( [0] => 値7 ) ) |
1 2 3 4 5 6 7 |
<?php $ary['キー1']['key1'] = '値1'; $ary['キー1']['key2'] = '値2'; $ary['キー2']['key1'] = '値3'; $ary['キー2']['key2'] = '値4'; $ary['キー2'][] = '値5'; print_r($ary); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Array ( [キー1] => Array ( [key1] => 値1 [key2] => 値2 ) [キー2] => Array ( [key1] => 値3 [key2] => 値4 [0] => 値5 ) ) |
PHPには2つの配列を結合したり、配列に要素を追加するなどの配列の操作をする関数や演算子が用意されています。
配列の操作 array_merge()関数で配列を結合する
array_merge()関数
配列の後ろに配列を追加することができます。結合後の配列は数値のキーが0から振り直されます。引数は結合したい配列を指定するだけです。
1 |
array_merge($array1, $array2, $...) |
1 2 3 4 5 6 7 |
<?php $ary1 = array('値1', '値2', '値3'); $ary2 = array('値4', '値5', '値6'); $ary = array_merge($ary1, $ary2); print_r($ary1); print_r($ary2); print_r($ary); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Array ( [0] => 値1 [1] => 値2 [2] => 値3 ) Array ( [0] => 値4 [1] => 値5 [2] => 値6 ) Array ( [0] => 値1 [1] => 値2 [2] => 値3 [3] => 値4 [4] => 値5 [5] => 値6 ) |
1 2 3 4 5 6 7 |
<?php $ary1 = array('値1', '値2', '値3'); $ary2 = array('key1'=>'a', 'key2'=>'b', 'key3'=>'c', 'd', 'e'); $ary = array_merge($ary1, $ary2); print_r($ary1); print_r($ary2); print_r($ary); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Array ( [0] => 値1 [1] => 値2 [2] => 値3 ) Array ( [key1] => a [key2] => b [key3] => c [0] => d [1] => e ) Array ( [0] => 値1 [1] => 値2 [2] => 値3 [key1] => a [key2] => b [key3] => c [3] => d [4] => e ) |
配列の操作 +演算子で配列を結合する
+演算子で配列を結合することもできます。ただし数値のキーはそのままで、キーが重複する場合は前の配列の値を残します。
1 2 3 4 5 6 7 |
<?php $ary1 = array('値1', '値2', '値3'); $ary2 = array('値4', '値5', '値6'); $ary = $ary1 + $ary2; print_r($ary1); print_r($ary2); print_r($ary); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Array ( [0] => 値1 [1] => 値2 [2] => 値3 ) Array ( [0] => 値4 [1] => 値5 [2] => 値6 ) Array ( [0] => 値1 [1] => 値2 [2] => 値3 ) |
1 2 3 4 5 6 7 |
<?php $ary1 = array('値1', '値2', '値3'); $ary2 = array('key1'=>'a', 'key2'=>'b', 'key3'=>'c', 'd', 'e'); $ary = $ary1 + $ary2; print_r($ary1); print_r($ary2); print_r($ary); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Array ( [0] => 値1 [1] => 値2 [2] => 値3 ) Array ( [key1] => a [key2] => b [key3] => c [0] => d [1] => e ) Array ( [0] => 値1 [1] => 値2 [2] => 値3 [key1] => a [key2] => b [key3] => c ) |
配列の操作 array_push()関数で配列に要素を追加する
array_push()関数
配列に要素を追加します。引数は第1引数に配列、第2引数以降に追加したい要素を指定します。
1 |
array_push($array, $val1, $val2, $...) |
キーは数値で振られます。配列に既に数値のキーが使用されている場合はその数値の最大値+1として連番で振られます。
1 2 3 4 5 |
<?php $ary1 = array('key1'=>'a', 'key2'=>'b', 'key3'=>'c', 'd', 'e'); print_r($ary1); array_push($ary1, 'xyz', 100); print_r($ary1); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Array ( [key1] => a [key2] => b [key3] => c [0] => d [1] => e ) Array ( [key1] => a [key2] => b [key3] => c [0] => d [1] => e [2] => xyz [3] => 100 ) |
1 2 3 4 5 6 7 8 |
<?php $ary1 = array('key1'=>'a', 'key2'=>'b', 'key3'=>'c', 'd', 'e'); $ary2 = array('値1', '値2', '値3'); print_r($ary1); print_r($ary2); array_push($ary1, $ary2); print_r($ary1); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Array ( [key1] => a [key2] => b [key3] => c [0] => d [1] => e ) Array ( [0] => 値1 [1] => 値2 [2] => 値3 ) Array ( [key1] => a [key2] => b [key3] => c [0] => d [1] => e [2] => Array ( [0] => 値1 [1] => 値2 [2] => 値3 ) ) |
配列に値をセットする部分でも出てきましたが[]で要素を追加することもできます。
1 2 3 4 5 |
<?php $ary1 = array('key1'=>'a', 'key2'=>'b', 'key3'=>'c', 'd', 'e'); $ary1[] = 100; $ary1[] = array(1,2,3); print_r($ary1); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Array ( [key1] => a [key2] => b [key3] => c [0] => d [1] => e [2] => 100 [3] => Array ( [0] => 1 [1] => 2 [2] => 3 ) ) |
配列の要素数
count()関数を使用すると配列に含まれる要素数を取得することができます。
1 2 3 4 5 |
<?php $ary1 = array('key1'=>'a', 'key2'=>'b', 'key3'=>'c', 'd', 'e'); print_r($ary1); $cnt = count($ary1); print('配列の要素数:' . $cnt . PHP_EOL); |
1 2 3 4 5 6 7 8 9 |
Array ( [key1] => a [key2] => b [key3] => c [0] => d [1] => e ) 配列の要素数:5 |
1 2 3 4 5 |
<?php $ary1 = array(array('値1', '値2'), array('値3', '値4')); print_r($ary1); $cnt = count($ary1); print('配列の要素数:' . $cnt . PHP_EOL); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Array ( [0] => Array ( [0] => 値1 [1] => 値2 ) [1] => Array ( [0] => 値3 [1] => 値4 ) ) 配列の要素数:2 |
オプションとして第2引数にCOUNT_RECURSIVEを指定すると含まれている配列の個数も加えた個数を返します。
1 2 3 4 5 |
<?php $ary1 = array(array('値1', '値2'), array('値3', '値4')); print_r($ary1); $cnt = count($ary1, COUNT_RECURSIVE); print('配列の要素数:' . $cnt . PHP_EOL); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Array ( [0] => Array ( [0] => 値1 [1] => 値2 ) [1] => Array ( [0] => 値3 [1] => 値4 ) ) 配列の要素数:6 |
配列をループで処理する
forを使用した場合
1 2 3 4 5 |
<?php $ary1 = array('値1', '値2', '値3'); for ($i = 0 ; $i < count($ary1); $i++) { print($ary1[$i] . PHP_EOL); } |
1 2 3 |
値1 値2 値3 |
1 2 3 4 5 6 |
<?php $ary1 = array(array('key1'=>'値1', 'key2'=>'値2'), array('key1'=>'値3', 'key2'=>'値4')); for ($i = 0 ; $i < count($ary1); $i++) { print($ary1[$i]['key1'] . PHP_EOL); print($ary1[$i]['key2'] . PHP_EOL); } |
1 2 3 4 |
値1 値2 値3 値4 |
foreachを使用した場合
1 2 3 4 5 |
<?php $ary1 = array('key1'=>'a', 'key2'=>'b', 'key3'=>'c', 'd', 'e'); foreach($ary1 as $key => $val) { print($val . PHP_EOL); } |
1 2 3 4 5 |
a b c d e |
1 2 3 4 5 6 |
<?php $ary1 = array(array('key1'=>'値1', 'key2'=>'値2'), array('key1'=>'値3', 'key2'=>'値4')); foreach($ary1 as $key => $list) { print($list['key1'] . PHP_EOL); print($list['key2'] . PHP_EOL); } |
1 2 3 4 |
値1 値2 値3 値4 |
forは配列の添字が数値でないと扱えないですが、foreachは添字が数値でも文字列でも扱うことができるのでPHPではforeachを使用する場面が多いでしょう。