web-dev-qa-db-fra.com

Tableaux avec clés NULL

PHP trivia ici.

Si nous déclarons un tableau comme celui-ci:

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

On peut y accéder comme ça

print $arr[NULL];

Cela affichera hello. Pourquoi est-ce utile, pertinent ou nécessaire? Est-ce un bug PHP ou une fonctionnalité?

Ma seule idée était que vous pourriez déclarer un tableau avec la clé NULL égale à un message d'erreur pour expliquer à quiconque utilise une clé NULL que leur clé est nulle:

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

Quelqu'un at-il trouvé cela utile? Semble être quelque chose qui cause plus de mal que de bien.

46
FaddishWorm

Citation de le manuel :

Null sera converti en chaîne vide, c'est-à-dire que la clé null sera réellement stockée sous "".

Les détails supplémentaires sur la façon dont les clés sont castées sont les suivants:

La clé peut être un entier ou une chaîne. La valeur peut être de n'importe quel type.

De plus, les conversions de clés suivantes se produiront:

  • Les chaînes contenant des nombres décimaux valides, sauf si le nombre est précédé d'un signe +, seront converties en type entier. Par exemple. la clé "8" sera en fait stockée sous 8. En revanche, "08" ne sera pas converti, car ce n'est pas un entier décimal valide.
  • Les flottants sont également convertis en entiers, ce qui signifie que la partie fractionnaire sera tronquée. Par exemple. la clé 8.7 sera effectivement stockée sous 8.
  • Les booléens sont également convertis en entiers, c'est-à-dire que la clé true sera réellement stockée sous 1 et la clé false sous 0.
  • Null sera converti en chaîne vide, c'est-à-dire que la clé null sera réellement stockée sous "".
  • Les tableaux et les objets ne peuvent pas être utilisés comme clés. Cela entraînera un avertissement: type de décalage illégal.

Quant à savoir si cela est utile ou nécessaire, c'est discutable. Vous êtes invité à utiliser des clés entières ou de chaîne et vous avez été averti de la conversion implicite de clés.

59
Salman A

J'ai trouvé la possibilité d'avoir des clés Null utiles, lors de l'accès à db, en utilisant une classe, qui peut utiliser l'une des valeurs de colonne comme clé du tableau retourné. Certaines valeurs de colonne peuvent être nulles.

10
mikewasmike

Étant donné une API de formulaire remplie par un tableau php associatif, j'ai trouvé utile d'utiliser une valeur à clé nulle pour indiquer la valeur NULL dans une base de données. Par exemple.:

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

Dans ce cas, null est mappé sur une valeur NULL (par défaut) dans la colonne de base de données foreignkey_id et 0 sur une ligne avec la clé 0.

Cependant, en dehors de ce cas d'utilisation particulier, j'ai tendance à penser que le commentaire de DCoder fait autorité ici ...

4
DMCoding