逻辑运算符表达PHP数组



我的表达式=>({2606}或{2549}或{2543}或({2605}和{2562}(({2408}和{2593}(

我想要这样的输出。

[

"AND" => [ 
     "OR" => [ 2606, 2549, 2543, "AND" => [ 2605, 2562 ] ],
     "OR" => [ 2387, 2383, 1990, 2412, 2411, 2409, "AND" => [ 2408, 2593 ] ]
 ]

]

需要一个php脚本。

$rule = "({2606} OR {2549} OR {2543} OR ({2605} AND {2562})) AND ({2387} OR {2383} OR {1990} OR {2412} OR {2411} OR {2409} OR ({2408} AND {2593}))";
$previous_rule = '';
// Clean Curly Braces and Trim is there's a space.
$rule = trim( str_replace( array( "{", "}" ) , "", $rule ) );
echo "INPUT: " . $rule . "<br><br>";
foreach( range('a', 'z') as $letter ){
    $substituted_part = "(". substitution( $rule ) . ")";
    $$letter = $substituted_part;
    $rule = str_replace( $substituted_part, $letter, $rule );
    if( $previous_rule != $rule )
        $previous_rule = $rule;
    else
        break;
}
echo "<PRE>";
print_r( replaceOriginal($rule) );
function replaceOriginal( $rule ){
    if( preg_match("/[a-z]/i", $rule) ){
        if( strpos( $rule, "AND" ) !== false )
            $processed_rule = array( "AND" => explode(" AND ", $rule ) );
        else if( strpos( $rule, "OR" ) !== false )
            $processed_rule = array( "OR" => explode(" OR ", $rule ) );
        foreach( $processed_rule as $operator => $values ){
            $processed_rule[$operator] = process( $values );
        }
        return $processed_rule;
    }
}
function process( $values ){
    foreach( $values as $key => $value ){
        if( !empty( $GLOBALS[$value] ) ){
            $substituted_value = str_replace( array( "(", ")" ) , "", $GLOBALS[$value] );
            $values[$key] = replaceOriginal( $substituted_value );;
        }
    }
    return $values;
}
function substitution( $rule ){
    // Get anything thats wrapped in parentheses.
    if( preg_match_all('#((([^()]+|(?R))*))#', $rule, $matches) ){
        foreach( $matches[1] as $value ){
            return substitution( $value );
        }
    }else{
        return $rule;
    }
}

相关内容

  • 没有找到相关文章

最新更新