5

配列を定義するとしましょう:

$a = Array();
$a[0] = 1;
$a['0'] = 2;
$a['0a'] = 3;
print_r($a);

出力はかなり期待されています。値を上書きできるようにするために、内部で何らかの処理が行われていると思いstrval()ます。intval()

Array
(
    [0] => 2
    [0a] => 3
)

しかし、これは私を混乱させるものです。

foreach($a as $k => $v) {
    print(gettype($k) . "\n");
}

これは私に与えます:

integer
string

配列キーを使用する場合、PHPが内部でこれらの型変換を行うのはどうしてですか?つまり、ドキュメントに従って、キーが「有効な10進整数」であるとどのように判断しますか?また、is_int文字列では機能しません。

4

1 に答える 1

9

すべてphpマニュアルで説明されています

PHPの配列は、実際には順序付けられたマップです。

キーは整数または文字列のいずれかです。

いくつかのタイプキャストが実行されます(文字列でも)

有効な整数を含む文字列は、整数型にキャストされます。たとえば、キー「8」は実際には8の下に格納されます。一方、「08」は有効な10進整数ではないため、キャストされません。

フロートも整数にキャストされます。これは、小数部分が切り捨てられることを意味します。たとえば、キー8.7は実際には8の下に保存されます。

Boolも整数にキャストされます。つまり、キーtrueは実際には1の下に格納され、キーfalseは0の下に格納されます。

nullは空の文字列にキャストされます。つまり、キーnullは実際には""の下に格納されます。

配列とオブジェクトをキーとして使用することはできません。これを行うと、警告が表示されます:無効なオフセットタイプ。

編集

PHPが内部で配列を処理する方法について詳しく知りたい場合は、この記事をお勧めします

于 2013-01-30T19:39:16.547 に答える