多くの演算子は、配列かどうかで異なった振る舞いをする。
<?php $a = array(1, 2, 3); $b = array('a' => 1, 'b' => 2, 'c' => 3); var_dump($a + $b); /* array(6) { [0]=> int(1) [1]=> int(2) [2]=> int(3) ["a"]=> int(1) ["b"]=> int(2) ["c"]=> int(3) } */ ?>
但し、配列のキーに重複が存在する場合は結果が異なる。
<?php $a = array(1, 2, 3); $b = array('a' => 1, 2, 3); var_dump($a + $b); /* array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) ["a"]=> int(1) } */ ?>
■配列の比較
配列は以下のように、演算子(==、===)を使って比較することができる。
<?php $a = array(1, 2, 3); $b = array(0 => 1, 1 => 2, 2 => 3); $c = array('a' => 1, 'b' => 2, 'c' => 3); $d = array(2 => 3, 0 => 1, 1 => 2); var_dump($a == $b);//true var_dump($a === $b);//true var_dump($a === $d);//false var_dump($a == $c);//false var_dump($a === $c);//false ?>
基本的には、キーと値のペアが同じように存在していればtrueを返す。注目するべきなのは、$bと$dの違いである。キーと値のペアは同様に存在しているが、順序が異なっているとPHP内部では異なった配列として扱われている。その結果、2番目と3番目の表示が異なっている。
■配列の要素
要素数
以下の例が示すとおり(JavaScriptのlengthと同様)count関数は、スカラー値が引数に指定された時に常に1を返すため、配列かどうかの判定には使えない。
<?php $tmAry = array(1, 4, 16); print(count($tmpAry));//3 $tmpStr = 'sample'; print(count($tmpStr));//1 ?>
配列かどうかの判定をするには、以下のようにis_array関数を使う。
<?php if(is_array($tmpAry)){ //code } ?>
任意の要素が存在するかテストする
以下のようにin_array関数を使う。またデフォルトでは型のチェックは行われないが、3番目の引数にtrueをセットすることにより、型のチェックまで行うことができる。
<?php $tmpAry = array(1, 4, 16); if(in_array(4, $tmpAry)){//true //code } ?>
要素の削除
要素を削除するには、以下のようにunset関数を使用する。
<?php $tmpAry = array(1, 4, 16); unset($tmpAry[1]); if(in_array(4, $tmpAry)){//false //code } ?>
ランダムに要素を取得する
array_rand関数を使用すると、第二引数で指定した数だけランダムに配列から要素を取り出す。第二引数のデフォルトは1である。また、第二引数が2以上の場合だけ、戻り値も配列となる。
<?php $tmpAry = array('a' => 'sample', 'b' => 'test', 'c' => 'prototype'); $value = array_rand($tmpAry);//string(1) "b" $values = array_rand($tmpAry, 2); /* array(2) { [0]=> string(1) "a" [1]=> string(1) "b" } */ ?>
各関数について
- bool in_array(mixed $needle, array $haystack[, bool $strict=false])
- $needleが配列$haystackに存在するかを返す。第三引数で「true」を指定すると型の整合性まで調べる。
- mixed array_rand(array $input[, int $num_request=1])
- ランダムに配列のキーを選び、その値を返す。第二引数に2以上の値を設定した場合は、配列のキーの配列が返る。
- void unset(mixed $var[, …])
- 指定した変数の割り当てを解除する。但し、実際には関数ではなく言語構造である。
■配列のキーを取得
以下のようにarray_keys関数を使用すると、配列のキーが配列として返される。
<?php $tmpAry = array('a' => 'sample', 'b' => 'test', 'c' => 'prototype'); $keys = array_keys($tmpAry); var_dump($keys); /* array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } */ ?>
各関数について
- array array_keys(array $input)
- 配列のキーを全て返す。
■配列の反転
キーと値の反転
<?php $tmpAry = array('a' => 'sample', 'b' => 'test', 'c' => 'prototype'); var_dump(array_flip($tmpAry)); /* array(3) { ["sample"]=> string(1) "a" ["test"]=> string(1) "b" ["prototype"]=> string(1) "c" } */ ?>
順序の反転
以下のようにarray_reverse関数は順序を逆にした配列を返す。但し、キーが文字列のペアの関係性は保持され、キーが数値の要素のみ順序が逆になる。また以下の例を見ての通り、array()で指定した順序と逆の結果が出力される。
<?php $tmpAry = array(0 => 'sample', 1 => 'test', 'c' => 'prototype'); var_dump(array_reverse($tmpAry)); /* array(3) { ["c"]=> string(9) "prototype" [0]=> string(4) "test" [1]=> string(6) "sample" } */ ?>
個人的には、この手の関数は殆ど使用した事はない。
各関数について
- array array_flip(array $ary)
- 配列$aryのキーが値に、値がキーになった配列を返す。但し、キーに重複が出た場合は最後の値で上書きされる。また、値にオブジェクトなどがあった場合は、警告を発し処理が飛ばされる。
- array array_reverse(array $ary[, bool $preserve_keys=false])
- 要素を逆順にした配列を返す。第二引数が「true」の場合は、キーが保持される。