假设我想检查简单的数学进展。我明白我可以这样做:
if ($a<$b and $b<$c and $c<$d and $d<$e and $e<$f) { echo OK; }
有没有办法以更方便的方式做到这一点?像这样
if ($a..$f isprog(<)) { echo OK; }
答案 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;
}