PHP foreach在foreach外部更新变量,然后在内部再次使用它

时间:2018-08-23 06:38:41

标签: php foreach

我想更新foreach范围之外的变量,并在其中的条件中再次使用它,但condition中的变量与初始值保持不变。它在外部得到更新,但是内部的条件仍然使用旧值进行比较。条件中使用的变量里面的变量也如何更新?

$total = 5.00000008;
for($i = 0; $i < count($values); $i++) {
        if($total == $values[$i]){
            $total += 0.00000001;
        }
    }

我指的是if条件中的$ total变量,它不会被更新。

3 个答案:

答案 0 :(得分:1)

@NanThiyagan在评论中写道:

  

”您的问题尚不清楚。但是您的代码可以正常运行   eval.in/1050113“

检查输出。它说5.0000001。这可能会提示您php自动执行某些操作以舍入您的值。

阅读:http://php.net/manual/en/language.types.float.php 并注意以下部分:

  

“所以永远不要相信浮点数结果到最后一位,并且不要   直接比较浮点数是否相等。“

在本文中,他们以隐式精度解决问题:https://www.leaseweb.com/labs/2013/06/the-php-floating-point-precision-is-wrong-by-default/

赞:

ini_set('precision', 17);
echo "0.1 + 0.2 = ". ( 0.1 + 0.2 ) ."\n";
$true = 0.1 + 0.2 == 0.3 ? "Equal" : "Not equal";
echo "0.1 + 0.2 = 0.3 => $true\n";

答案 1 :(得分:1)

我认为您可能不完全了解循环中发生的事情。

每次条件为 true 时,变量$total都会被更新。并且条件变量$total也被更新

这是一个例子,您可以看到它的发生:

$values = [5.00000008, 5.00000009, 5.00000007];
$total = 5.00000008;

for($i = 0; $i < count($values); $i++) {
    echo ((string) __line__ . ' => ' . (string) $total . " (current total)\n");
    if($total === $values[$i]){
        echo ((string) __line__ . ' => ' . (string) $total . " (before increment)\n");
        $total += 0.00000001;
        echo ((string) __line__ . ' => ' . (string) $total . " (after increment)\n");
    }
}

这是经过测试的代码:https://3v4l.org/EJkNG

答案 2 :(得分:1)

  

我指的是if条件中的$ total变量,它不会被更新。

当然会更新。

只需在循环内回显$ total即可找出结果。

<?php

$values = [5.00000007, 5.00000008, 5.00000009];
$total = 5.00000008;
for ($i = 0; $i < count($values); $i++) {
    if ($total == $values[$i]) {
        $total += 0.00000001;
    }
    echo $total . "\n";
}

输出:

5.00000008
5.00000009
5.0000001

https://3v4l.org/RBHa3

自己看看