@blog.justoneplanet.info

日々勉強

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」の場合は、キーが保持される。

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment