web-dev-qa-db-ja.com

PHP配列キーで許可されている文字?

私はたくさんの奇妙なキャラクターで満たされたいくつかのphp配列キーを持っています。

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

79
cgwebprojects

manual によると:

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

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

  • 有効な整数を含む文字列は、整数型にキャストされます。例えば。キー「8」は実際には8の下に格納されます。一方、「08」は有効な10進整数ではないため、キャストされません。
  • 浮動小数点数も整数にキャストされます。つまり、小数部は切り捨てられます。例えば。キー8.7は実際には8の下に保存されます。
  • ブールも整数にキャストされます。つまり、キーtrueは実際には1の下に格納され、キーfalseは0の下に格納されます。
  • Nullは空の文字列にキャストされます。つまり、キーnullは実際には ""の下に格納されます。
  • 配列とオブジェクトはキーとして使用できません。これを行うと、「オフセットタイプが無効です」という警告が表示されます。

マニュアル 再び

文字列は一連の文字であり、文字はバイトと同じです。つまり、PHPは256文字セットのみをサポートするため、ネイティブUnicodeサポートは提供されません。文字列タイプの詳細を参照してください。

つまり、任意の文字列をキーにすることができます。また、文字列には任意のバイナリデータ(最大2GB)を含めることができます。したがって、キーには任意のバイナリデータを使用できます(文字列には任意のバイナリデータを使用できるため)。

配列キーのランダムな(有効な)不正使用:

$w = array(chr(0) => 'null byte?', chr(Rand(0, 255)) => 'random byte?');
var_dump($w);
83
Corbin

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

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

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

  • 有効な整数を含む文字列は、整数型にキャストされます。例えば。キー「8」は実際には8の下に格納されます。一方、「08」は有効な10進整数ではないため、キャストされません。
  • 浮動小数点数も整数にキャストされます。つまり、小数部は切り捨てられます。例えば。キー8.7は実際には8の下に保存されます。
  • ブールも整数にキャストされます。つまり、キーtrueは実際には1の下に格納され、キーfalseは0の下に格納されます。
  • Nullは空の文字列にキャストされます。つまり、キーnullは実際には ""の下に格納されます。
  • 配列とオブジェクトはキーとして使用できません。そうすると、警告が表示されます:オフセットタイプが無効です。
11
Matthew

この回答は、私が抱えていた問題に関する詳細情報を探していることを示しています。 UTF-8文字を含む文字列を使用していましたが、配列のキーとしては機能しませんでした。

何かのようなもの

$str = "R&D - Solution";
$arr = array( "R&D - Solution" => "Research" );
echo $arr[$str];  // did not work

私にとって(大きくも賢くない)解決策はこれを行うことでした。

$str = md5("R&D - Solution");
$arr = array( md5("R&D - Solution") => "Research" );
echo $arr[$str];  // works!
8
Rob

PHP文字列に挿入できるものはすべて配列キーとして使用できます。許可される文字に制限はありません。

$a = array();

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

$x = array();
echo $a[$x]; // not ok
5
Marc B

PHP配列キーは、整数または文字列にすることができます。 PHP文字列はバイト配列、つまりバイトのシーケンスを意味します。他の種類の文字列はありません。PHPは配列キー文字列に特別な制限を課しません。つまり、文字列である限り、何でもかまいません。

5
deceze

すべての答えが真実であることに加えて、 PSRs を使用して、ナイスで標準的なコーディングスタイルを得るための最高のプログラマー間のルールの一種であることができます。

0
VeRJiL

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

0
GordonM