【问题标题】:In general, ++ is the same thing as +1. Why ++ != +1 on this code? [duplicate]一般来说,++ 与 +1 是一样的。为什么 ++ != +1 在此代码上? [复制]
【发布时间】:2025-12-03 23:35:01
【问题描述】:

我用过foreach、&、++、+1。

一般来说,++ 与 +1 是一回事。 但是 ++ != 此代码上的 +1(php7.3.4),为什么?

$data1 = $data2 = [
    ['id' => 0],
    ['id' => 1],
    ['id' => 2],
];
foreach ($data1 as $key => &$val) {
    $val['id'] = $val['id']++;
}
foreach ($data2 as $key => &$val) {
    $val['id'] = $val['id']+1;
}

var_dump($data1 == $data2); // false. why?

感谢Nigel Ren

我修改了这段代码

foreach ($data1 as $key => &$val) {
    // $val['id'] = $val['id']++;
    $val['id']++;
}

结果是true。 但我不知道为什么$val['id'] = $val['id']++ != $val['id']++?

【问题讨论】:

  • 我知道你的意思。但这不是我想要的。我使用了 ++ 和 +1。
  • 尝试使用$val['id']++;而不是第一个分配。
  • 是的,我使用了 $val['id']++ 并且值为 true。 @Nigel Ren。

标签: php


【解决方案1】:

$i++ 和 ++$i 之间有一个基本的区别。

预增量

++$i 是 Pre-increment,将 $i 加一,然后返回 $i

后增量

$i++ 是后自增,返回 $i,然后将 $i 加一

加法

$i += 1 是加法,加1,然后返回$i

请看:https://www.php.net/manual/en/language.operators.increment.php

在你的情况下使用

$val['id']++; 

而不是

$val['id'] = $val['id']++;

希望,它会有所帮助。

【讨论】:

  • 是的,结果是true,但我不知道为什么$val['id'] = $val['id']++ != $val['id']++?
  • 这是因为 $val['id'] 的值首先在变量中赋值,然后递增。这里是一个额外的操作,但是 $val['id']++ 只是一个操作。
  • 我知道这个问题现在是$x = $x++ != $x++,非常感谢!
  • 分配后val 不会增加吗?
  • $x 被分配$x,然后$x 增加1.@nyx