PHP Array Operations(配列における演算子)
多くの演算子は、配列かどうかで異なった振る舞いをする。
<?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」の場合は、キーが保持される。
TrackBack URL :
Comments (0)
コメントはまだありません»
コメントはまだありません。
この投稿へのコメントの RSS フィード。TrackBack URL
コメントする