PHP: validare il bilanciamento delle parentesi

In PHP possiamo validare il bilanciamento delle parentesi.

Una coppia di parentesi è bilanciata se alla parentesi di apertura segue la corrispondente parentesi di chiusura. Possiamo implementare la seguente soluzione.


function is_valid($s = '') {
    if(empty($s)) {
        return false;
    }
    $allowed_chars = ['(', ')', '{', '}', '[', ']'];
    $valid = true;
    $len = strlen($s);

    for($i = 0; $i < $len; $i++) {
        if(!in_array($s[$i], $allowed_chars)) {
            $valid = false;
        }
    }

    $j = 0;

    while($j < $len) {
        
        $ch = $s[$j];
        $next_i = $j + 1;
        $next = $next_i < $len ? $s[$next_i] : null;
        if(is_null($next)) {
            break;
        }
        switch($ch) {
            case '(':
                if($next !== ')') {
                    $valid = false;
                }
                break;
            case '{':
                if($next !== '}') {
                    $valid = false;
                } 
                break;
            case '[':
                if($next !== ']') {
                    $valid = false;
                }       
                break;
            default:
                break;    
        }

        $j++;
    }

    return $valid;
}
    

Esempio d'uso:


 $examples = ['()', '()[]{}', '(]'];
foreach($examples as $e) {
   var_dump(is_valid($e));
}