【问题标题】:Arrays with NULL keys具有 NULL 键的数组
【发布时间】:2013-08-15 06:27:17
【问题描述】:

这里是 PHP 琐事。

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

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

我们可以这样访问它

print $arr[NULL];

这将打印hello。为什么这是有用的、相关的或必要的?是 PHP 的 bug 还是功能?

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

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

有没有人觉得这很有用?似乎是弊大于利。

【问题讨论】:

  • “弊大于利”可以说是关于 PHP 中的很多事情...
  • @DCoder 有时似乎是 php 座右铭
  • +1 我很高兴这个工作,我认为拥有一个空键可能非常有用
  • @DCoder “弊大于利”可以说是关于 PHP。 ← 为你解决了这个问题。

标签: php arrays null


【解决方案1】:

引用the manual:

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

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

键可以是整数或字符串。该值可以是任何 输入。

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

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

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

【讨论】:

  • key null 将实际存储在"" 覆盖之前的值,如果有的话。此类项目可以通过$arr[""]访问; $arr[NULL] 将返回存储在 "" 的项目。
【解决方案2】:

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

【讨论】:

  • 出于同样的原因,我也发现这很有用。
  • 如果另一列的值是空字符串"",你就有麻烦了。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多