89

多くの奇妙な文字が取り込まれたphp配列キーがいくつかあります。

これは許されますか?使用できないものに制限はありますか?

4

11 に答える 11

97

マニュアルによると:

キーは整数または文字列のいずれかです。値は任意の型にすることができます。

さらに、次のキー キャストが発生します。

  • 有効な整数を含む文字列は整数型にキャストされます。たとえば、キー "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);
于 2012-05-22T05:21:03.223 に答える
12

キーは文字列または整数でなければなりません。いくつかのキャストが行われますが、マニュアルはうまく説明していると思います:

キーは整数または文字列のいずれかです。値は任意の型にすることができます。

さらに、次のキー キャストが発生します。

  • 有効な整数を含む文字列は整数型にキャストされます。たとえば、キー "8" は実際には 8 の下に格納されます。一方、"08" は有効な 10 進整数ではないため、キャストされません。
  • 浮動小数点も整数にキャストされます。これは、小数部分が切り捨てられることを意味します。たとえば、キー 8.7 は実際には 8 の下に格納されます。
  • bool も整数にキャストされます。つまり、キー true は実際には 1 の下に格納され、キー false は 0 の下に格納されます。
  • Null は空の文字列にキャストされます。つまり、キー null は実際には "" の下に格納されます。
  • 配列とオブジェクトはキーとして使用できません。これを行うと、次の警告が表示されます: Illegal offset type.
于 2012-05-22T05:20:50.110 に答える
6

PHP配列キーは、整数または文字列にすることができます。PHP文字列はバイト配列であり、バイトのシーケンスを意味します。他のタイプの文字列はなく、PHPは配列キー文字列に特別な制限を課しません。言い換えれば、それが文字列である限り、何でもあります。

于 2012-05-22T05:22:03.240 に答える
5

PHP 文字列に詰め込むことができるものはすべて、配列キーとして使用できます。使用できる文字に制限はありません。

$a = array();

$x = 'long string of random garage';
echo $a[$x]; // this is ok

$x = array();
echo $a[$x]; // not ok
于 2012-05-22T05:21:38.077 に答える
0

個人的には、配列キーの異常な文字に問題はありませんでした。キーがスカラーでなければならないことを除いて、何が合法で何が合法でないかは十分に文書化されていません。あなたの最善の策は、それを試してみることです。

于 2012-05-22T05:21:56.013 に答える
0

PHP配列では、key : 2.3または10進数を使用できません

于 2020-10-27T06:16:15.853 に答える