php while 循环中用当前变量减去前一个变量

问题描述 投票:0回答:3

其实我真的不知道如何得到同一个变量的减值。

例如(期望值)

expected output

我的代码如下:

$sel = mysql_query("SELECT RIGHT(serial,4) as value, serial, date 
    from photodata 
    where folder='$m' or (serial >= '$cm' && serial <= '$cm2')") or die(mysql_error());

while ($selt=mysql_fetch_array($sel)) {
    $value = $selt['value'];
    $ser = $selt['serial'];
    $dd = $selt['date'];
    $rr = $value-$value;  
}

我真的确定 $rr 行不通,但我只是尝试过。请任何人帮助我。

php loops variables while-loop subtraction
3个回答
1
投票

只需打印 $rr 作为减值并检查,更改上面代码片段中的一些代码。希望,它能帮助你。

$index = 0;
$oldv = 0;
while ($selt=mysql_fetch_array($sel)) {
    $value = $selt['value'];
    $ser = $selt['serial'];
    $dd = $selt['date']; 
    if($index==0) {
        $oldv = $value;
        $index = 1;
     }
    $rr = $value - $oldv;
    echo $rr;
    $oldv = $value;
 }

0
投票

我假设您想减去上一行的值。尽管建议您不要使用 mysql_* 函数。

$oldv = 0;
while ($selt=mysql_fetch_array($sel)) {
 $oldv = ($oldv == 0) ? $value : $oldv;
 $value= $selt['value'];
 $ser=$selt['serial'];
 $dd=$selt['date'];
 echo $subtract = $value - $oldv;
 echo $oldv = $value;
}

0
投票
  • while 循环不是循环行的现代方法;只需将结果集对象直接传递到
    foreach()
    循环并将每一行视为关联数组即可。
  • 迭代时,用当前值减去前一个值。如果没有先前的值,则从自身中减去当前值即可得到问题中要求的
    0
  • 相减后,用当前值覆盖缓存的前一个值变量,然后继续循环。

这是一个基本演示:https://3v4l.org/pJpDT

$sel = <<<SQL
SELECT RIGHT(serial,4) as value,
       serial,
       date 
FROM photodata 
WHERE folder=?
    OR serial BETWEEN ? AND ?
SQL;

$rows = $mysqli->execute_query($sql, [$m, $cm, $cm2]);
$result = [];
foreach ($rows as $row) {
    $result[] = $row + [
        'sub' => $row['value'] - ($prev ?? $row['value'])
    ];
    $prev = $row['value'];
}
var_export($result);
© www.soinside.com 2019 - 2024. All rights reserved.