Advertisement
Guest User

CheckBraceSyntax

a guest
Mar 22nd, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.74 KB | None | 0 0
  1. <?
  2. $start = microtime(true);
  3.        
  4.        
  5.        
  6.         function array_key_last($array) {
  7.         if (!is_array($array) || empty($array)) {
  8.             return NULL;
  9.         }
  10.        
  11.         return array_keys($array)[count($array)-1];
  12.     }
  13.    
  14.     function checkBraces($string){
  15.         $arrPlus = array(
  16.             '('=>1,
  17.             '['=>2,
  18.             '{'=>3,
  19.             '<'=>4,
  20.         );
  21.         $arrMinus = array(
  22.             ')'=>1,
  23.             ']'=>2,
  24.             '}'=>3,
  25.             '>'=>4,
  26.         );
  27.         $reverseMinus = array(
  28.             ')'=>'(',
  29.             ']'=>'[',
  30.             '}'=>'{',
  31.             '>'=>'<',
  32.         );
  33.         $arPlus = ['(', '[', '{', '<'];
  34.         $arMinus = [')', ']', '}', '>'];  
  35.         $strCount = strlen($string);
  36.         $command = array();
  37.         $j = 0;
  38.         $i = 0;
  39.         $curr = $string{1};
  40.         while ($i <= $strCount) {
  41.             $curr = $string{$i};
  42.             if (in_array($curr,$arPlus)) {
  43.                 $j+=$arrPlus[$curr];
  44.                 $command[] = $curr;
  45.             }
  46.             if (in_array($curr,$arMinus)){
  47.                 if ($command){
  48.                     if (end($command) !== $reverseMinus[$curr]) return 1;
  49.                     if (($delete = end($command) == $reverseMinus[$curr])or end($command) == $curr){
  50.                         $j-=$arrMinus[$curr];
  51.                         if ($delete){
  52.                             unset($command[array_key_last($command)]);
  53.                             $delete = 0;
  54.                         } else {
  55.                             $command[] = $curr;
  56.                         }
  57.                     }
  58.                 } else {
  59.                     return 1;
  60.                 }
  61.                
  62.             }
  63.             $i++;
  64.             //var_dump($i);
  65.         }
  66.         return ($j!==0)?1:0;
  67.     }
  68.     echo '<br>Тест #3: ' . checkBraces('before ( middle []) after ') . ' == 0<br>';
  69.  
  70.     echo '<br>Тест #1: ' . checkBraces('---(++++)----') . ' == 0<br>';
  71.     echo '<br>Тест #2: ' . checkBraces('') . ' -> 0<br>';
  72.     echo '<br>Тест #4: ' . checkBraces(') (') . ' == 1<br>';
  73.     echo '<br>Тест #5: ' . checkBraces('} {') . ' == 1<br>';
  74.     echo '<br>Тест #6: ' . checkBraces('<(   >') . ' == 1<br>';
  75.     echo '<br>Тест #7: ' . checkBraces('(  [  <>  ()  ]  <>  )') . ' == 0<br>';
  76.     echo '<br>Тест #8: ' . checkBraces('   (      [)') . ' == 1<br>';
  77.     echo '<br>Тест #9: ' . checkBraces('[)') . ' == 1<br>';
  78.     echo '<br>Тест #10: ' .checkBraces('({)}') . ' == 1<br>';
  79.     echo '<br>Тест #11: ' .checkBraces('({') . ' == 1<br>';
  80.     echo '<br>Время выполнения скрипта: ' . round(microtime(true) - $start, 8) . ' сек.';
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement