【问题标题】:PHP increment featurePHP增量功能
【发布时间】:2016-09-15 02:50:31
【问题描述】:

谁能解释一下为什么会这样:

$a[0] = 1;
$a[0] = $a[0]++;
echo $a[0];

在此代码中,a[0] 始终变为 1。即使 $a[0] = $a[0]++; 被多次执行,它也不会增加 a[0] 的值。

但是如果我们像这样分配给不同的变量:

$a[0] = 1;
$b[0] = $a[0]++;
echo $a[0];

$a[0] 将设置为 2。(当然b[0] 将设置为 1)。

我不明白为什么会这样。

【问题讨论】:

  • 谢谢大家,现在了解它的工作原理
  • 欢迎继续...

标签: php increment


【解决方案1】:

因为您的++ 在变量之后,这意味着它会在 ++ 运算符返回原始值之后递增,而assinment 运算符将其重新分配回原始值。

由于您在增量之前重新分配变量,因此数字永远没有机会增加..

正确的做法是放弃重新分配..

$a[0] = 1;
$a[0]++;
echo $a[0];

https://3v4l.org/Tijrb

您也可以将 ++ 移到开头,它会按预期运行:

$a[0] = 1;
$a[0] = ++$a[0];
echo $a[0];

https://3v4l.org/9fZ3U

【讨论】:

  • 它在返回 $a[0] 给赋值运算符后递增,而不是在回显后递增。回声在下一行代码中。增量发生在该行代码之前。
  • 增量从不发生,因为变量一增加就重新分配。
  • 那么,肯定是打错了。我在屏幕上看到的你的陈述是“它会在回声之后增加”。它将在回显之前、赋值之前递增,并被赋值操作覆盖。
  • “增量永远不会发生”也是不正确的。增量发生在赋值之前,它会覆盖增量。所以,它确实发生了。它只是在下一步操作中被覆盖。
  • 我已经澄清了答案.. 是的,这是一个错字,我没有意识到我在说 echo 但是,是的,它是在之后而不是之前,在重新分配之前增加你需要把 ++ 放在变量,正如我解释的那样。
【解决方案2】:

好的,让我们从第一个开始。您将$a[0] 的值分配为1,对其应用增量操作,但再次存储在$a[0] 中,$a[0] 尚未更新,因为增量是后增量。但是,如果您将其作为预增量进行,那么您将获得值 2。

例如:1

$a[0] = 1;
$a[0] = $a[0]++;
echo $a[0]; //1

查看预增量的效果:

$a[0] = 1;
$a[0] = ++$a[0];
echo $a[0]; //2

例如:2

与示例一相同,您进行了后增量,这次您存储在不同的变量中,这意味着 $a[0] 未在此处更新,并且执行增量操作。所以你得到的结果是 2。这里的 post 和 pre 都是一样的。

$a[0] = 1;
$b[0] = $a[0]++;
echo $a[0]; //2

此处$b[0] 的值将与此阶段$a[0] 的值相同。但是如果这里应用了预增量,那么$b[0] 的值也会发生变化,并且它的存储量为 2。

注意:您必须了解pre-incrementpost-increment。更多visit - language.operators.increment.php

【讨论】:

    【解决方案3】:

    来自 PHP 文档:

    PHP 支持 C 风格的前后递增和递减运算符。

    ++$a  Pre-increment   Increments $a by one, then returns $a.
    $a++  Post-increment  Returns $a, then increments $a by one.
    

    (见http://php.net/manual/en/language.operators.increment.php

    因此,当使用后增量 ($x++) 时,如果将结果分配给另一个变量,您将得到变量的值之前发生增量。

    【讨论】:

      【解决方案4】:

      简化此以删除索引。不需要。

      $a = $a++;
      

      首先,执行右侧。因为 ++ 在变量之后,所以它表示“返回 $a 然后递增 $a”。它正是这样做的。它将 $a 返回到赋值操作,然后递增 $a。

      右边执行完后,赋值操作运行。右侧在递增之前返回 $a。所以,它仍然是 $a 的原始值。这就是 $a 被分配的内容。这会覆盖刚刚发生在右侧的增量操作。

      【讨论】:

      • $a = $a++; 是多余的,与$a[0]++ 完全不同,您只需要$a++ 没有理由分配它..
      猜你喜欢
      • 1970-01-01
      • 2011-09-13
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多