【问题标题】:Why null key change value to 1 in php array?为什么空键在php数组中将值更改为1?
【发布时间】:2013-02-09 14:51:24
【问题描述】:

以下是我正在测试的代码 -

<?php

error_reporting(E_ALL);

$myarr = array(NULL => "swapnesh", TRUE => 1, 4 => "swap", "swap" => 4, TRUE => NULL, NULL => TRUE );
echo "<pre>";
//var_dump($myarr);
print_r($myarr);
echo count($myarr);

此代码输出 -

Array
(
    [] => 1
    [1] => 
    [4] => swap
    [swap] => 4
)
4

关于代码的疑虑/查询 -

  1. 为什么 NULL 作为键将值更改为 1(在第一个索引时)我可以考虑这样一种情况,有人可能会建议,因为 NULL 作为键被使用了两次,所以值被覆盖,但我用 FALSE 检查了它,所以它必须输出 0 但没有在这种情况下输出值。
  2. 第二个值 1 为空,但它应该是 1。
  3. Count 是 4,我认为是 5 或 6,但对于 4,我不确定它是如何跳过最后两个值的。

询问前涉及搜索 -

在 php net 上,我检查了文档,发现这是相关的,但在我的情况下无法弄清楚。 链接-http://php.net/manual/en/language.types.array.php

编辑对于第三点,我相信 TRUE & NULL 被使用了两次,所以它的输出 4 但是让我知道是否确实如此。

【问题讨论】:

    标签: php arrays null boolean


    【解决方案1】:

    您正在使用print_r,它使您的输出可读:

    1. NULL 键从"swapnesh" 覆盖到truetrue 的可打印表示为 1
    2. NULLfalse 不会产生可打印格式的输出。
    3. 计数为 4,因为您要覆盖 2 个键。

    要获得更好的变量输出,请使用var_dump

    【讨论】:

    • 感谢您的解释..我与第三点很接近,但真的无法掌握关于第 1 点和第 2 点的任何内容
    【解决方案2】:

    为什么 NULL 作为键将值更改为 1(在第一个索引处)我可以考虑这样一种情况,有人可能会建议,因为 NULL 作为键被使用了两次,所以值被覆盖,但我用 FALSE 检查了它,所以它必须输出 0 但没有在这种情况下输出值。

    PHP 将布尔值 FALSE 打印为空字符串。将其类型转换为 int 以获得“0”。

    在第二个值 1 是空白但它应该是 1。

    TRUE 也被用作键两次,因此它的值被覆盖为 NULL,它打印为空字符串。

    计数是 4,我认为是 5 或 6,但对于 4,我不确定最后两个值是如何跳过的。

    您的计数较低,因为数组中的最后两个值覆盖了数组中的现有值。

    【讨论】:

      【解决方案3】:

      nulltrue 不是有效的密钥。键可以是字符串或整数。 nulltrue 分别被转换为空字符串和 1,这意味着您有多个空字符串/1 键,它们相互覆盖。

      如果您想要自动索引键,请关闭键:

      $myarr = array("swapnesh", 1, 4 => "swap", "swap" => 4, null, true);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-13
        • 2014-05-03
        相关资源
        最近更新 更多