多くの奇妙な文字が取り込まれたphp配列キーがいくつかあります。
これは許されますか?使用できないものに制限はありますか?
マニュアルによると:
キーは整数または文字列のいずれかです。値は任意の型にすることができます。
さらに、次のキー キャストが発生します。
- 有効な整数を含む文字列は整数型にキャストされます。たとえば、キー "8" は実際には 8 の下に格納されます。一方、"08" は有効な 10 進整数ではないため、キャストされません。
- 浮動小数点も整数にキャストされます。これは、小数部分が切り捨てられることを意味します。たとえば、キー 8.7 は実際には 8 の下に格納されます。
- bool も整数にキャストされます。つまり、キー true は実際には 1 の下に格納され、キー false は 0 の下に格納されます。
- Null は空の文字列にキャストされます。つまり、キー null は実際には "" の下に格納されます。
- 配列とオブジェクトはキーとして使用できません。これを行うと、次の警告が表示されます: Illegal offset type.
再びマニュアル:
文字列は一連の文字であり、文字はバイトと同じです。これは、PHP がサポートするのは 256 文字セットのみであるため、ネイティブ Unicode サポートを提供しないことを意味します。文字列型の詳細を参照してください。
つまり、任意の文字列をキーにすることができます。また、文字列には任意のバイナリ データ (最大 2GB) を含めることができます。したがって、キーは任意のバイナリ データにすることができます (文字列は任意のバイナリ データにすることができるため)。
配列キーのランダムな (有効な) 乱用:
$w = array(chr(0) => 'null byte?', chr(rand(0, 255)) => 'random byte?');
var_dump($w);
キーは文字列または整数でなければなりません。いくつかのキャストが行われますが、マニュアルはうまく説明していると思います:
キーは整数または文字列のいずれかです。値は任意の型にすることができます。
さらに、次のキー キャストが発生します。
- 有効な整数を含む文字列は整数型にキャストされます。たとえば、キー "8" は実際には 8 の下に格納されます。一方、"08" は有効な 10 進整数ではないため、キャストされません。
- 浮動小数点も整数にキャストされます。これは、小数部分が切り捨てられることを意味します。たとえば、キー 8.7 は実際には 8 の下に格納されます。
- bool も整数にキャストされます。つまり、キー true は実際には 1 の下に格納され、キー false は 0 の下に格納されます。
- Null は空の文字列にキャストされます。つまり、キー null は実際には "" の下に格納されます。
- 配列とオブジェクトはキーとして使用できません。これを行うと、次の警告が表示されます: Illegal offset type.
PHP配列キーは、整数または文字列にすることができます。PHP文字列はバイト配列であり、バイトのシーケンスを意味します。他のタイプの文字列はなく、PHPは配列キー文字列に特別な制限を課しません。言い換えれば、それが文字列である限り、何でもあります。
PHP 文字列に詰め込むことができるものはすべて、配列キーとして使用できます。使用できる文字に制限はありません。
$a = array();
$x = 'long string of random garage';
echo $a[$x]; // this is ok
$x = array();
echo $a[$x]; // not ok
個人的には、配列キーの異常な文字に問題はありませんでした。キーがスカラーでなければならないことを除いて、何が合法で何が合法でないかは十分に文書化されていません。あなたの最善の策は、それを試してみることです。
PHP配列では、key : 2.3または10進数を使用できません