增加数组索引值?

时间:2019-08-13 14:04:45

标签: php

我正在对数组进行测试,但是我在代码中看到了一些东西:

    $arr = array();
    $arr[0]++;
    echo $arr[0];

输出= 1;

为什么index [0]的值为1?

在上面的代码中,我没有做

这样的作业
$arr[0] = 1 ;

5 个答案:

答案 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
?>
相关问题