53

PHP琐事在这里。

如果我们这样声明一个数组:

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

我们可以这样访问

print $arr[NULL];

这将打印hello. 为什么这是有用的、相关的或必要的?它是 PHP 错误还是功能?

我唯一的想法是,您可以声明数组,其 NULL 键等于一条错误消息,以向使用 NULL 键的任何人解释他们的键为空:

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

有没有人发现这很有用?似乎是弊大于利。

4

3 回答 3

68

从手册中引用:

Null 将被强制转换为空字符串,即键 null 将实际存储在 "" 下。

有关如何投射键的其他详细信息如下:

键可以是整数或字符串。该值可以是任何类型。

此外,还会发生以下关键转换:

  • 包含有效十进制整数的字符串,除非数字前面有 + 号,否则将被强制转换为整数类型。例如,键“8”实际上将存储在 8 下。另一方面,“08”不会被强制转换,因为它不是有效的十进制整数。
  • 浮点数也被转换为整数,这意味着小数部分将被截断。例如,密钥 8.7 实际上将存储在 8 之下。
  • 布尔值也被转换为整数,即键 true 将实际存储在 1 下,而键 false 将存储在 0 下。
  • Null 将被强制转换为空字符串,即键 null 将实际存储在 "" 下。
  • 数组和对象不能用作键。这样做会导致警告:非法偏移类型。

至于这是否有用或必要,这是值得商榷的。您被要求使用整数或字符串键,并且您已收到有关隐式键转换的警告。

于 2013-08-15T06:30:11.153 回答
11

我发现在访问 db 时,使用一个类可以使 Null 键很有用,该类可以使用其中一个列值作为返回数组的键。某些列值可能为空。

于 2014-05-04T19:26:56.207 回答
5

给定一个由关联 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 的评论在这里是权威的......

于 2015-10-11T14:29:24.227 回答