PHP:配列
・array_flip(配列)
配列のキーと値を、総入れ替えします。
$a = array('a'=>1, 'b'=>2);
$a = array_flip($a); // array (1 => 'a', 2 => 'b') になる。
var_export($a);
・array_search(値, 配列)
指定した値が、配列にあるかを調べます。
あれば対応するキーを、なければ FALSE を返します。
# 「値」を調べて、「キー」が返る。
$a = array('a'=>1, 'b'=>2);
$key = array_search(1, $a); // この場合は 'a'
var_dump($key);
見つかったキーが 0 の場合と、
キーが見つからなかった FALSE とを判別するため、
比較は、=== を使いましょう。
・array_key_exists(キー, 配列)
指定したキーが、配列にあるかを調べます。
あれば TRUE、なければ FALSE を返します。
$a = array('a'=>1, 'b'=>2);
$flag = array_key_exists('a', $a); // この場合は TRUE
var_dump($flag);
・array_keys(配列)
配列のキーだけを取り出して、新たな配列を生成します。
$a = array('a'=>1, 'b'=>2);
$b = array_keys($a); // array('a', 'b') になる
var_export($b);
・count
配列の要素数を返します。
$a = array(1, 2, 3, 4);
$count = count($a); // 4
var_dump($count);
echo '<br>';
$a = array();
$count = count($a); // 0
var_dump($count);
・list
キーが数値の配列を引数にして、各値を、
それぞれ指定する変数に代入します。
# 配列の各要素をバラバラにする、ということです。
$a = array('a', 'b', 'c');
list($A, $B, $C) = $a;
echo $A .'<br>'; // 'a'
echo $B .'<br>'; // 'b'
echo $C .'<br>'; // 'c'
・array_merge(配列, 配列 [,配列 ...])
複数の配列を結合(マージ)します。
$a = array('a'=>1, 'b'=>2);
$b = array('c'=>3, 'd'=>4);
$c = array_merge($a, $b);
var_export($c); // array('a'=>1, 'b'=>2, 'c'=>3, 'd'=>4);
配列を結合する方法には、
array_merge と、もうひとつ、+演算子があります。
$a = array('a'=>1, 'b'=>2);
$b = array('c'=>3, 'd'=>4);
$c = $a + $b;
var_export($c); // array('a'=>1, 'b'=>2, 'c'=>3, 'd'=>4);
ほとんど同じですが、
複数の配列間で、キーが重複している場合は、振る舞いが違います。
# 全く同じなら、array_merge は不要なわけですし...
よく理解していないとバグの元なので、細かく説明します。
・array_merge でキーが重複している場合
キーが文字列なら、後の値で、前の値を上書きします。
$a = array('a'=>1, 'b'=>2);
$b = array('a'=>3, 'c'=>4); // キー 'a' が重複
$c = array_merge($a, $b);
var_export($c); // array('a'=>3, 'b'=>2, 'c'=>4); // 前の 'a'=>1 が捨てられる
キーが数字なら、値は全て並べられ、キーは最初から振り直されます。
$a = array(0=>'a', 1=>'b');
$b = array(0=>'c', 3=>'d'); // キー 0 が重複
$c = array_merge($a, $b);
var_export($c); // array(0=>'a', 1=>'b', 2=>'c', 3=>'d'); // 全部残る。キーは振り直し
・+演算子でキーが重複している場合
キーが文字列でも数値でも、前の値が残って、
重複している後ろの値は捨ててしまいます。
$a = array('a'=>1, 'b'=>2);
$b = array('a'=>3, 'c'=>4); // キー 'a' が重複
$c = $a + $b;
var_export($c); // array('a'=>1, 'b'=>2, 'c'=>4) // 後ろの 'a'=>3 が捨てられる
$a = array(0=>'a', 1=>'b');
$b = array(0=>'c', 3=>'d'); // キー 0 が重複
$c = $a + $b;
var_export($c); // array(0=>'a', 1=>'b', 3=>'d'); // 後ろの 0=>'c' が捨てられる
このように、微妙に仕様が異なるので、十分注意して使う必要があります。
が、
使いこなせば、
・デフォルト配列を元に、差分だけを変更した配列を作るとか (by array_merge)
・飛び飛びになった数値キーを 0 から振り直すとか (by array_merge)
・新規のキーだけを自分の配列に取り込むとか (by +演算子)
ありがちな処理が簡単に書けます。