我正在对数组进行测试,但是我在代码中看到了一些东西:
$arr = array();
$arr[0]++;
echo $arr[0];
输出= 1;
为什么index [0]的值为1?
在上面的代码中,我没有做
这样的作业$arr[0] = 1 ;
答案 0 :(得分:5)
我认为这是由于PHP中的类型松散所致。
null == false == 0
这意味着$arr[0]
(++之前的null
)大致等于0。因此null(或0)+1 = 1。
答案 1 :(得分:3)
因为它解释为$arr[0] = $arr[0] + 1 ;
。如果您尝试使用var_dump($arr[0])
,那么您会看到var_dump($arr[0]);
返回NULL
,因此NULL + 1
等于1(内部将 NULL转换为0 )这就是为什么它最后返回1
的原因。
$arr = array();
$arr[0] = $arr[0] + 1 ;
echo $arr[0];
此外,您还应该看到
之类的通知注意:未定义的偏移量:0
答案 2 :(得分:1)
$arr[0]++;
该表达式执行为:
$arr[0] = $arr[0] + 1;
,但是您的数组不包含索引为零的元素。该元素未实例化,其值为null
。该表达式可以写成:
$arr[0] = null + 1;
null
值转换为整数,并自动具有0值,并且表达式以
$arr[0] = 0 + 1;
答案 3 :(得分:1)
并不是真的很重要,因为效果是相同的,但是在增量操作之前没有类型变戏法。递增未定义的值将直接导致1。不会转换为零,然后递增。
PHP手册解释了此行为。首先,null
:
特殊NULL值表示没有值的变量。 NULL是唯一可能为null类型的值。
在以下情况下,变量将被视为空值:
已为其分配了常量NULL。
它尚未设置为任何值。
它已被取消设置()。
接下来,Incrementing/Decrementing operators:
注意:递增/递减运算符仅影响数字和字符串。数组,对象,布尔值和资源不受影响。 递减NULL值也没有效果,但是递增NULL会导致1 。
所以$arr[0]
是null
,因为它尚未设置为任何值。
而增加null
则得到1。
答案 4 :(得分:0)
使用3个示例之一:
<?php
$arr = array();
for ($i=0; $i < sizeof($arr)+1; $i++){
$arr[$i] = $i+1;
}
echo $arr[0]; //1
?>
<?php
$arr = array('0');
$arr[0]++;
echo $arr[0]; //1
?>
<?php
$arr[0] = 0;
echo $arr[0]++; //1
?>