以下是我正在测试的代码 -
<?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
关于代码的疑虑/疑问 -
在询问之前进行搜索 -
在php网上我检查了文档,发现这是相关的东西,但在我的情况下无法解决。 链接 - http://php.net/manual/en/language.types.array.php
编辑对于第3点我相信TRUE&amp; NULL被使用了两次,即它输出4然后让我知道它是否完全是这种情况。
答案 0 :(得分:3)
您正在使用print_r
,它使您的输出可读:
"swapnesh"
覆盖到true
,true
的可打印表示形式为1 NULL
和false
不会以可打印格式生成输出。要获得更好的变量输出,请使用var_dump
答案 1 :(得分:1)
为什么NULL作为键更改值为1(在第一个索引处)我可以考虑一个场景,当有人可能建议因为NULL因为一个键被使用两次所以值被覆盖但是我用FALSE检查它因此它必须输出0但是没有在这种情况下输出值。
PHP将布尔值FALSE打印为空字符串。将它转换为int以获得'0'。
第二个值1为空白但它应该是1。
TRUE也被用作键两次,因此它的值被覆盖为NULL,打印为空字符串。
计数是4,我想的是5或6但是4我不知道它是如何跳过最后两个值。
您的计数较低,因为数组中的最后两个值会覆盖数组中的现有值。
答案 2 :(得分:0)
null
和true
不是有效密钥。键可以是字符串或整数。 null
和true
分别转换为空字符串和1
,这意味着您有几个空字符串/ 1
密钥相互覆盖。
如果您想要自动编入索引的密钥,请将密钥保持关闭状态:
$myarr = array("swapnesh", 1, 4 => "swap", "swap" => 4, null, true);