You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP代码中echo $$v++输出1或true的原因是什么?

<?php

function firstDuplicate($a) {
    foreach ($a as $v)
        echo $$v++;
    return -1;
}
firstDuplicate([2, 1, 3, 5, 3, 2]);

运行原理说明

涉及三个PHP基础语法特性的共同作用:

  • 可变变量语法$$v:会将$v的取值作为动态变量名,读取/创建对应变量。例如当$v=3时,$$v等价于读取变量$3。
  • 后置递增++的运算规则:先返回变量的当前值作为整个表达式的结果,再对变量本身执行+1操作。
  • 未定义变量的默认处理:PHP读取从未声明过的变量时,默认取值为null,null执行+1操作后会自动转换为整数1。

逐轮执行过程

传入数组为[2, 1, 3, 5, 3, 2],循环逐次执行逻辑如下:

  • 第一次$v=2:读取未定义的$2取null,后置++先返回null输出空,随后$2自增为1
  • 第二次$v=1:读取未定义的$1取null,后置++先返回null输出空,随后$1自增为1
  • 第三次$v=3:读取未定义的$3取null,后置++先返回null输出空,随后$3自增为1
  • 第四次$v=5:读取未定义的$5取null,后置++先返回null输出空,随后$5自增为1
  • 第五次$v=3:读取已存在的$3当前值为1,后置++先返回1输出,随后$3自增为2
  • 第六次$v=2:读取已存在的$2当前值为1,后置++先返回1输出,随后$2自增为2

你观察到的输出1就是当循环命中重复元素时,返回了之前自增后存储的1值。完整运行这段代码最终会输出拼接后的11。

额外说明:这是PHP里用可变变量代替哈希表实现O(n)复杂度查找首个重复元素的技巧,常规写法会把echo $$v++换成if($$v++) return $v,第一次命中重复值时$$v++返回1判断为真,直接返回对应元素即可。

内容的提问来源于stack exchange,提问作者user8571743

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 00:15:06