2

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

<?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. 计数是 4,我认为是 5 或 6,但对于 4,我不确定最后两个值是如何跳过的。

询问之前涉及的搜索 -

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

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

4

3 回答 3

3

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

  1. NULL 键被从"swapnesh"to覆盖true,可打印表示true为 1
  2. NULL并且false不产生可打印格式的输出。
  3. 计数为 4,因为您要覆盖 2 个键。

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

于 2013-02-24T09:42:47.007 回答
1

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

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

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

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

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

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

于 2013-02-24T09:41:08.973 回答
0

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

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

$myarr = array("swapnesh", 1, 4 => "swap", "swap" => 4, null, true);
于 2013-02-24T09:40:37.973 回答