PHP算术使用变量

时间:2017-03-22 12:31:37

标签: php

我想知道如何解决这个等式: 我有一组数字 - 例如:

130 136 142 148 149 159

(我已经强调了兴趣的价值 148 )。

值之间的差异是:

6 6 6 1 10 (我已经强调了兴趣的价值 1 )。

148 是第一个感兴趣的值的原因是,值到值,它具有最小的数字(1)。

情景

这组数字是提交给数据库的输入。然后我开始计算如下:

    $st1 = $userRow['val2(130)'] - $userRow['val1(136)'];
    $st2 = $userRow['val3(142)'] - $userRow['val2(130)'];
    $st3 = $userRow['val4(148)'] - $userRow['val3(142)'];
    $st4 = $userRow['val5(149)'] - $userRow['val4(148)'];
    $st5 = $userRow['val6(159)'] - $userRow['val5(149)'];

这给了我差异 - 价值与价值,下面给出了最小值。

    $val = min($st1, $st2, $st3, $st4, $st5);

那之后如何将148或$ userRow ['val4(148)']作为感兴趣的值隔离?请记住,一组数字可以是任意组合,但整个范围总是会增加,例如:

130 140 149 159 167 169

110 120 130 132 150 160

P.S 我知道语法很混乱 - 但它只是出于解释目的。 感谢

2 个答案:

答案 0 :(得分:2)

我不知道这个奇怪的语法:$userRow['val2(130)']应该是什么;如果$userRow是数据库查询获取的结果,那么这意味着您有名为val2(130)等的列,这没什么意义。

即使你只是在这里意味着$userRow['val2'],它仍然表明你应该重构你的表格布局 - 编号的列名几乎总是表明你做错了。最有可能的是,这应该正确规范化

无论如何,将值放入一个可以轻松循环的结构中 - 比如一个数组,那么这非常简单:

$values = array(130, 136, 142, 148, 149, 159);

$minDiff = PHP_INT_MAX; // initialize with highest possible value
$element = null;

for($i=1, $l=count($values); $i<$l; ++$i) { // loop over all items from 2nd to the last one
  $diff = $values[$i] - $values[$i-1]; // calculate difference between current
                                       // and previous item
  if($diff < $minDiff) { // is the difference lower than the current minimal difference?
    $element = $values[$i-1]; // previous element becomes our current "result"
    $minDiff = $diff; // current difference becomes the new minimum
  }
}
var_dump($element);

答案 1 :(得分:0)

如果你可以把你的值放到一个数组或任何其他类型的列表中,这样你就可以使用它,这真的很简单。

<?php
$mySet = array(130, 136, 142, 148, 149, 159); //your numbers

$mySet_val = array();
for($i = 0; $i < (count($mySet) - 1); $i++){
  $mySet_val[] = $mySet[$i] - $mySet[$i+1]; //calculate the differences
}
$key = array_keys($mySet_val , min($mySet_val)); //find the index of the smallest value
echo $mySet[$key]; //your corresponding value

我不确定您的$ userRow是什么类型的数组,但请查看$mySet = $userRow是否有效。