php – 变量变量如何与运算符一起使用?
给定一个数组(例如:$a = [2,3,1,5,2]),找到第一个副本.在这种情况下,在索引2处将是值3.
第二个副本将是2,因为索引更高(5). 我在网上找到的解决方案: function firstDuplicate($a) { foreach ($a as $v) if ($$v++) return $v; return -1; } $$v如何运作? $$v在第一次循环时等于$2,在第二次循环时等于$3,依此类推. 如何适用于这种情况? 稍后编辑:$$v什么时候返回true?
这里有两件事情在玩.代码以一种非常有趣的方式编写,虽然很难理解.
第一:variable variables 如您所知,是的每次互动$$v都会转换为变量,分别为$2,$3,$1,$5,$2. PHP非常灵活(甚至可能太多),所以它允许*测试if($2),即使$2显然从未实例化过.它假定NULL为其值,因此if检查无法通过.
第二名:Incrementing/Decrementing operators() 理解预增量和后增量之间的区别非常重要. $a = 0; $b = 0; ($a++ === 1) // FALSE (++$b === 1) // TRUE 预增量添加到变量然后返回它的(新的,添加的)值;虽然后增量返回变量的当前值,然后才增加它. 结合两者 为了便于阅读,让我们翻译这一行 if ($$v++) return $v; 成 if ($$v) { return $v; } $$v = $$v + 1; 因为这才是真正发生的事情. 跳到第二次迭代(数组中的前3个,其中$v = 3,我们有: // Right now $3 doesn't exist,so it's value is NULL if ($3) { // "if (NULL)",so it's FALSE return 3; } $3 = $3 + 1; // "NULL + 1" // $3 === 1 at this point
现在谈到第三次迭代(数组中的第二次迭代,其中$v = 3再次 – 但此时变量$3存在且值为1) // Right now: $3 === 1 if ($3) { // TRUE return 3; } $3 = $3 + 1; // This line is never reached,the code has "returned" already 这就是它,希望它有点容易理解.这是必须结合才能有意义的许多不同部分. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |