PHP配列(key関連)まとめ


やっぱりマニュアルは優秀です。
PHPマニュアル> 言語リファレンス>型>配列
余りにもボリュームが多いので今回はkey関連を重点的に。

構文

配列の定義

  • array()で指定。
  • PHP5.4以降なら[]でもOK
  • 最後のカンマ(,)はあってもなくてもOK
    • 1行で指定する場合は最後の要素にカンマ(,)はつけないのがおすすめ
    • 複数行なら次の要素の追加が楽になるしミスも防げるのでカンマを付けるのが一般的
// 1行
$array = array(1,2,3);

// 複数行
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// PHP 5.4 以降なら以下でもOK
// 1行
$array = [1,2,3];

// 複数行
$array = [
    "foo" => "bar",
    "bar" => "foo",
];

key

  • keyは整数または文字列
  • 添字配列と連想配列に違いはなく、keyの型は混在できる
  • keyはオプション。省略した場合はこれまでに使われた整数のキーの中で最大のものに 1 を加えた値を使用(まだ数字添字が存在しない場合や最大が負の値の場合は0)

keyのキャスト

元の型 キャストされる型
string string "key" → "key"
integerとして妥当な文字列1 integer "8" → 8
float integer 8.7 → 8
bool integer true → 1
false → 0
NULL 空文字 null → ""
array
object
使用不可
$array = array(
    1      => "a",
    "1"    => "b", # $array[1]の値は上書きされて"b"
    1.5    => "c", # $array[1]の値は上書きされて"c"
    "1.5"  => "d",
    true   => "e", # $array[1]の値は上書きされて"e"
    "foo"  => "f",
    "true" => "g", 
    -100   => 100,
    "-100" => -100, # $array[-100]の値は上書きされて-100
    "key省略",      # ここまでの数字添字の最大が1なので$array[2]として追加
);
var_dump($array);
/*
array(4) {
  [1]=>
  string(1) "e"
  ["1.5"]=>
  string(1) "d"
  ["foo"]=>
  string(1) "f"
  ["true"]=>
  string(1) "g"
[-100]=>
  int(-100)
[2]=>
  string(9) "key省略"
}
*/

$foo[bar]は誤り

  • 連想配列の添え字は引用符でくくる  → くくっていない場合は定数として解釈する
  • 変数や定数はくくると解釈できない
  • 文字列の中では定数は解釈されない
  • 文字列の中でも配列を波括弧{}でくくると定数を解釈
$foo = ['bar'=>'TRUE','baz'=>'FALSE'];
print $foo[bar]; //PHP Notice:  Use of undefined constant bar

//定数barを定義
define('bar','baz');

print $foo['bar'];  //TRUE
print $foo[bar];    //FALSE

print "$foo[bar]";    //TRUE #文字列の中なので定数が解釈されない
print "$foo['bar']"; //PHP Parse error
print "{$foo[bar]}";  //FALSE #波括弧でくくったので定数を解釈
print "{$foo['bar']}";//TRUE  #波括弧の中でも文字列として解釈させるにはクウォートする

定数を定義していない状態で$foo[bar]とした場合PHP側で
「あー、""''つけるの忘れたんだなー。」っていう賢い解釈をしてくれるので表示はする。
が、将来予約語にならない保証はないので危険。


  1. "08"、"8.7"などはそのまま文字列としてキャストされる