在特定条件下设置并存储变量,直到另一个特定条件


in specific condition set and store a variable until another specific condition

大家好,我是一个编程新手。我需要在php解决这个问题,但在任何不同的语言的解决方案将是伟大的。我试着用if语句来解决它,但是如果条件改变了,变量就消失了。简单的例子,便于理解。

// possible conditions ( 'cond1', 'cond2', 'cond3', 'cond4','cond5' )
// conditions can be called randomly

我想要这样的东西:

$variable = 'off';
since ( $condition == 'cond2' )
    $variable = 'on';
until ( $condition == 'cond4' )

目标是在'cond2'条件中切换变量'on',并在其他条件按其顺序独立变化时保持它,直到condition更改为'cond4'并且变量切换回'off'。

谢谢你的建议

我不认为你目前的概念是可实现的PHP,因为你不能变量,你需要主动得到通知。所以有一个相同的解决方案但概念不同的情况是

class Condition {
    private $value;
    private $variable = false;
    public function setCondition($new_value) {
        $this->value = $new_value;
    }
    public function getCondition() {
        return $this->value;
    }
    public function isVariableSet() {
        return ($this->variable === true); //TRUE  if $this->variable is true
                                           //FALSE otherwise
    }
}

现在,在方法setCondition(...)中,您可以侦听并主动设置variable

    public function setCondition($new_value) {
        switch ($new_value) {
            case 'cond2':
                $this->variable = true;
                break;
            case 'cond4':
                $this->variable = false;
                break;
        }
        $this->value = $new_value;
    }

你可以像下面这样使用

$foo = new Condition();
$foo->setCondition('cond1');
var_dump( $foo->isVariableSet() ); //FALSE
$foo->setCondition('cond2');
var_dump( $foo->isVariableSet() ); //TRUE
$foo->setCondition('cond3');
var_dump( $foo->isVariableSet() ); //TRUE
$foo->setCondition('cond4');
var_dump( $foo->isVariableSet() ); //FALSE

或者在你的情况下:

$conditions = array( 'cond1', 'cond2', 'cond3', 'cond4','cond5' );
$cond = new Condition();
foreach ($conditions as $i => $condition) {
    $cond->setCondition($condition);
    if ($cond->isVariableSet() == true) {
        $toggle = 'on';
    }
    else {
        $toggle = 'off';
    }
    $results[$condition] = $toggle.' ;  ';
}

如果你不在循环外创建Condition的实例,你将一无所获,因为你每次都创建一个新对象,并且没有状态保留。然而,这正是需要的。

您也可以通过array_map()并保存foreach()

$conditions = array( 'cond1', 'cond2', 'cond3', 'cond4','cond5' );
$cond = new Condition();
$results = array();
$setCondGetVariable = function($condition) use($cond) {
    $cond->setCondition($condition);
    if ($cond->isVariableSet() == true) {
        $toggle = 'on';
    }
    else {
        $toggle = 'off';
    }
    return $toggle.' ;  ';
};
$results = array_map($setCondGetVariable, $conditions);