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側で
「あー、""
か''
つけるの忘れたんだなー。」っていう賢い解釈をしてくれるので表示はする。
が、将来予約語にならない保証はないので危険。
-
"08"、"8.7"などはそのまま文字列としてキャストされる ↩
Author And Source
この問題について(PHP配列(key関連)まとめ), 我々は、より多くの情報をここで見つけました https://qiita.com/ao_love/items/45dec77d154992bc96bc著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .