web-dev-qa-db-ja.com

NULLキーを持つ配列

PHPの雑学はこちら。

このような配列を宣言する場合:

<?php $arr = [ 'foo' => 'bar', NULL => 'hello' ]; ?>

このようにアクセスできます

print $arr[NULL];

これはhelloを出力します。なぜこれが役立つ、関連する、または必要なのですか? PHPバグまたは機能ですか?

私の唯一のアイデアは、NULLキーを使用するすべての人にキーがNULLであることを説明するために、エラーキーと等しいNULLキーを持つ配列を宣言できるということです。

$arr[NULL] = 'Warning you have used a null key, did you mean to?';

誰もがこれを便利だと感じましたか?善よりも害をもたらすもののようです。

46
FaddishWorm

マニュアル からの引用:

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

キーのキャスト方法に関する追加の詳細は次のとおりです。

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

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

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

これが有用または必要であることに関しては、議論の余地があります。整数または文字列キーを使用するように求められ、暗黙的なキーのキャストについて警告されました。

59
Salman A

返された配列のキーとして列値の1つを使用できるクラスを使用してdbにアクセスするときに、Nullキーを使用できる可能性があることがわかりました。一部の列の値はヌルになる可能性があります。

10
mikewasmike

連想php配列によって設定されたフォームAPIを考えると、データベース内のNULL値を示すためにnullキー付きの値を使用すると便利であることがわかりました。例えば。:

$this->addElement('select', 'foreignkey_id', array(
  'label'=>'Add a Poll',
  'multiOptions' => array(
      null => 'No value selected',
      '0' => 'Element with ID0 selected'
  )
));

この場合、nullはデータベース列foreignkey_idのNULL(デフォルト)値にマップされ、0はキー0の行にマップされます。

ただし、この特定のユースケース以外では、DCoderのコメントはここで信頼できると思う傾向があります...

4
DMCoding