检查变量列表中的进展

时间:2014-03-09 09:31:03

标签: php math comparison

假设我想检查简单的数学进展。我明白我可以这样做:

if ($a<$b and $b<$c and $c<$d and $d<$e and $e<$f) { echo OK; }

有没有办法以更方便的方式做到这一点?像这样

if ($a..$f isprog(<)) { echo OK; }

4 个答案:

答案 0 :(得分:0)

我不知道我的问题是否正确。但可行的是,你的进展的解决方案可能是用PHP提供的SPL的SplHeap对象。

$stack = new SplMaxHeap();
$stack->insert(1);
$stack->insert(3);
$stack->insert(2);
$stack->insert(4);
$stack->insert(5);

foreach ($stack as $value) {
    echo $value . "\n";
}

// output will be: 5, 4, 3, 2, 1

答案 1 :(得分:0)

创建一个值数组,迭代它们并维护一个标志,该标志检查当前元素值是否大于/小于下一个值的值。与此线程中的某些解决方案不同,这不会遍历整个数组。当它发现第一个不是进展的值时,它会停止循环。如果操作涉及大量数字,这将更加更快

function checkIfProg($arr, $compare) {
    $flag = true;
    for ($i = 0, $c = count($arr); $i < $c; $i++) {
        if ($compare == '<') {
            if (isset($arr[$i + 1]) && $arr[$i] > $arr[$i + 1]) {
                $flag = false;
                break;
            }
        } elseif ($compare == '>') {
            if (isset($arr[$i + 1]) && $arr[$i] < $arr[$i + 1]) {
                $flag = false;
                break;
            }
        }
    }
    return $flag;
}

用法:

$a = 2;
$b = 3;
$c = 4;
$d = 5;
$e = 9;
$f = 22;

$arr = array($a, $b, $c, $d, $e, $f);
var_dump(checkIfProg($arr, '<')); // => bool(true)

如果您想要动态创建数组,您可以使用一些变量魔术来实现此目的:

$arr = array();
foreach (range('a','f') as $v) {
    $arr[] = $$v;
}

这将创建一个数组,其中包含$a ... $f的所有变量值。

答案 2 :(得分:0)

我没有听说过这样的事情,但是如何使用简单的功能:

function checkProgress($vars){ //to make it easie i assume that vars can be given in an array
  $result = true;
  for ($i=0; $i<= count($vars); $i++){
    if ($i>0 && $vars[$i] > $vars[$i-1]) continue;
    $result = false;
  }
  return $result;
}

答案 3 :(得分:0)

快速解决它:

function ispositiveprogression($vars) {
 $num=count($vars)-1;
 while ($num) {
  $result = true;
  if ($vars[$num] > $vars[$num-1]) {
   $num--;
  }
  else { $result = false; break; }
 }
 return $result;
}